2017/03/03(金) [n年前の日記]
#2 [autohotkey] AutoHotkeyでマウスホイールの回転を検出
こんな感じだろうか…。
_wheelupdown_check_01.ahk
結果はこんな感じに。
_wheelupdown_check_01.ahk
; wheel up/down check ; use AutoHotKey v1.1.24.05 #SingleInstance, Force #InstallMouseHook appliname=wheelupdown_check_01 appliver=0.0.1 wtitle=%appliname% %appliver% ; GUI settings ; Gui, +Owner +AlwaysOnTop +Resize -SysMenu -MinimizeBox -MaximizeBox -Disabled -Caption -Border +ToolWindow Gui, +Owner +AlwaysOnTop +Resize -MinimizeBox -MaximizeBox Gui, Color, 336699 Gui, Font, CFFFFFF S26 W700 Q2, Arial Gui, Add, Text, Vkeystext, Alt+Q ... Exit Gui, Show, NoActivate, %wtitle% ; GuiControl, , keystext, WinSet, Transparent, 220, %wtitle% cwheeldown = 0 cwheelup = 0 check_cwheeldown = 0 check_cwheelup = 0 ks=WheelDown WheelUp Space Up Down Left Right BS keyslist := Object() nowstate := Object() oldstate := Object() Loop, Parse, ks, %A_Space% { k=%A_LoopField% v=%k% keyslist.Insert(k, v) nowstate.Insert(k, 0) oldstate.Insert(k, 0) } Loop, { For k, v in keyslist { n := nowstate[k] oldstate[k] := n nowstate[k] := 0 If k=WheelDown { If cwheeldown<>%check_cwheeldown% { check_cwheeldown := cwheeldown nowstate[k] := 1 } } Else If k=WheelUp { If cwheelup<>%check_cwheelup% { check_cwheelup := cwheelup nowstate[k] := 1 } } Else { nowstate[k] := GetKeyState(k) } } keys= For k, v in keyslist { If (nowstate[k] + oldstate[k])=1 If nowstate[k]<>0 keys=%keys% %k% } keys := Trim(keys, " ") If keys<> GuiControl, , keystext, %keys% Sleep, 16 } EXIT: GuiClose: ExitApp ~*WheelDown:: cwheeldown += 1 return ~*WheelUp:: cwheelup += 1 return ~!Q Up:: ; Alt + Q ... Exit Goto, EXIT
結果はこんな感じに。
◎ 補足説明。 :
以下のやり取りを参考にして書いてみたり。
_getkeystate wheel (Getkeystate not wheely good!) - Ask for Help - AutoHotkey Community
GetKeyStateを使ってホイール回転を検出しようとすると、ホイールを回した途端、そこからずっとOnが返ってくる状態になってしまう。しかし、ホットキーラベル(WheelDown::、WheelUp:: 等)を使うと、そこはホイールを回した瞬間だけ呼ばれるようで。なので、そこで変数の内容をインクリメントして、メインループ内で「変数の内容が今までと違っているか」を調べて、ホイール回転があったかどうかを判断してる。
GetKeyState は、「GetKeyState, 変数, キー種類」という形でも書けるけど、「n := GetKeyState(キー種類)」という形で書けば、1/0で状態を取得できるらしい。
_getkeystate wheel (Getkeystate not wheely good!) - Ask for Help - AutoHotkey Community
GetKeyStateを使ってホイール回転を検出しようとすると、ホイールを回した途端、そこからずっとOnが返ってくる状態になってしまう。しかし、ホットキーラベル(WheelDown::、WheelUp:: 等)を使うと、そこはホイールを回した瞬間だけ呼ばれるようで。なので、そこで変数の内容をインクリメントして、メインループ内で「変数の内容が今までと違っているか」を調べて、ホイール回転があったかどうかを判断してる。
GetKeyState は、「GetKeyState, 変数, キー種類」という形でも書けるけど、「n := GetKeyState(キー種類)」という形で書けば、1/0で状態を取得できるらしい。
[ ツッコむ ]
以上です。