MouseGesture.ahkで、マウスホイールを加速してみた。

 長いページをホイールでスクロールさせるのが面倒になって、ソフトごとにホイール係数変えてみたら便利だったので、さらに発展させてみた。

 ホイールを一方向に連続して回転させ続けると、徐々に加速――というか、動く距離が増えていく。
 解除はカウンターあてればできるのだし、移動量の増加と共に、許容する入力間隔も増加させた方がいいかも。調整は個々人によるだろうから、今回はとりあえず600固定にしといた。かなり素早く回した時だけ超加速――というのも考えたが、必死こいて回したくないというのが出発点なのでやめた。他に、Shift+ホイールとかでPageUp/Downさせるのもいいかも。

 以下、ブラウザ向けの例。条件定義等は各自適当に。内容自体は、MG.ahkでなくAHKでも動く。

[Browser]
Exe=iexplore.exe
Exe=firefox.exe
Exe=opera.exe
Exe=chrome.exe

[WU_]
G=WU_
Browser=if(("*WheelUp" == A_PriorHotkey) && (600 >= A_TimeSincePriorHotkey)) {【TAB】【TAB】if (6 > WUSW) {【TAB】【TAB】【TAB】WUSW++【TAB】【TAB】【TAB】Send, {WheelUp}【TAB】【TAB】} else if (18 > WUSW) {【TAB】【TAB】【TAB】;TipView("Turbo", 600)【TAB】【TAB】【TAB】WUSW++【TAB】【TAB】【TAB】Send, {WheelUp 3}【TAB】【TAB】} else {【TAB】【TAB】【TAB】;TipView("Super Turbo", 600)【TAB】【TAB】【TAB】Send, {WheelUp 6}【TAB】【TAB】}【TAB】} else {【TAB】【TAB】WUSW := 1【TAB】【TAB】Send, {WheelUp}【TAB】}

[WD_]
G=WD_
Browser=if(("*WheelDown" == A_PriorHotkey) && (600 >= A_TimeSincePriorHotkey)) {【TAB】【TAB】if (6 > WDSW) {【TAB】【TAB】【TAB】WDSW++【TAB】【TAB】【TAB】Send, {WheelDown}【TAB】【TAB】} else if (18 > WDSW) {【TAB】【TAB】【TAB】;TipView("Turbo", 600)【TAB】【TAB】【TAB】WDSW++【TAB】【TAB】【TAB】Send, {WheelDown 3}【TAB】【TAB】} else {【TAB】【TAB】【TAB】;TipView("Super Turbo", 600)【TAB】【TAB】【TAB】Send, {WheelDown 6}【TAB】【TAB】}【TAB】} else {【TAB】【TAB】WDSW := 1【TAB】【TAB】Send, {WheelDown}【TAB】}

 発動してるか判りにくいので、ツールチップを表示するユーザー関数「TipView」を仕込んである。使いたい人はコメントアウトを解除して、以下の関数をMG.ahkの拡張スクリプトに書くか、AHKの関数ライブラリに置く。



TipView.ahk
[PR]
by lordnoesis | 2012-10-15 20:30 | テクノロジ | Trackback | Comments(0)

AutoHotKey_Lで、Explorerのファイル操作を便利に。

 エクスプローラで「カレントフォルダ/選択ファイルのフルパスをコピー」「選択アイテムを上のフォルダへ移動」「選択フォルダの中身を吸い上げる」のみっつを実現してみた。アンドゥ/リドゥ対応。

$F12::
  PathList := GetSelectItemPath()
  if PathList {
    SplashView(PathList)
    Clipboard := PathList
  } else {
    WinGetText, CurPath, A
    RegExMatch(CurPath, "([A-Z]:\\[^\r\n]*)", $)
    SplashView($1)
    Clipboard := $1
  }
return

^u::
  PathList := GetSelectItemPath()
  if !PathList
    return
  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    SendPath := A_LoopField
    break
  }
  SplitPath, SendPath, , SendPath
  SplitPath, SendPath, , SendPath
  MsgBox, 292, 選択中のアイテムを上のフォルダへ移動, 以下のフォルダ・ファイルを上のフォルダへ移動します。`n`n%PathList%
  IfMsgBox, No
    return

  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    SendDir := ComObjCreate("Shell.Application").NameSpace(SendPath)
    SendDir.moveHere(A_LoopField)
  }
  SendDir :=
return

^r::
  PathList := GetSelectItemPath()
  if !PathList
    return
  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    SendPath := A_LoopField
    break
  }
  SplitPath, SendPath, , SendPath
  MsgBox, 292, 選択中のフォルダの中身を上のフォルダへ移動, 以下のフォルダの中身をこのフォルダに移動します。`n`n%PathList%
  IfMsgBox, No
    return

  ShellApp := ComObjCreate("Shell.Application")
  SendDir := ShellApp.NameSpace(SendPath)
  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    FileGetAttrib, FileAttrib, %A_LoopField%
    IfNotInString, FileAttrib, D  ; フォルダでなければ無視
      continue
    
    SendDir.moveHere(ShellApp.NameSpace(A_LoopField).Items)
    
    If CheckBlankDir(A_LoopField)
      FileRemoveDir, %A_LoopField%
  }
  ShellApp :=, SendDir :=
return

GetSelectItemPath() {  ; AutoHotkey スレッド part11 >>913
  for Window in ComObjCreate("Shell.Application").Windows
    if ( Window.hwnd == WinExist() ){
      for Item in Window.Document.SelectedItems
        FileList .= Item.Path "`n"
      break
    }
  StringTrimRight, FileList, FileList, 1
  return, FileList
}

CheckBlankDir(TrgDir) {
  Loop, %TrgDir%/*, 1
    return, 0
  return, 1
}

SplashView(TextBuf, Timer = 1500) {
  Progress, B1 ZH0 W800, %TextBuf%
  SetTimer, SplashClose, %Timer%
}

SplashClose:
  SetTimer, SplashClose, Off
  Progress, Off
return

 "Loop, Parse"~のとこは、正規表現で取り出した方がいいのかなー? 正規表現だと負荷高そう(※個人の思い込みです)。

 エクスプローラのアンドゥ/リドゥが使いたくてCOM使ってみたのだが、このあたりが素人の限界か。一度のアンドゥ/リドゥで、任意の(ワイルドカードで示せない)複数ファイルを操作するにはどうすりゃいいんだ?


[PR]
by lordnoesis | 2012-10-14 22:24 | テクノロジ | Trackback | Comments(0)
ブログトップ | ファンになる