AutoHotKeyで長押しの時の動作を変えたいと思ったんだけど、ちょっと嵌ったのでメモ。
ここのページを参考に、下記のように書いて走らせようとした。
F15:: ;F15キーを押した時 KeyWait, F15, T0.3 ;F15キーが離されるのを0.3秒待つ If (ErrorLevel){ ;ErrorLevelが1であれば、 Send,LF15 ;文字列1を出力 KeyWait, F15 ;F15が離されるのを待つ return }else{ ;そうでなければ、 Send,SF15。 ;文字列2を出力 KeyWait, F15 ;F15が離されるのを待つ return }
短く押すと「SF15」、長く押すと「LF15」が出るはずだったんだけど、長押ししても、「SF15」しか表示されない。
原因を探ると、下記コードがahkファイルに含まれていたのが原因だった。
F15 & WheelUp::Home F15 & WheelDown::End
「F15::」だけが存在するなら、キーを押したときに実行されるけど、組み合わせキーで使われていたら、キーを離した時に「F15::」の定義が実行される。
まあ、考えてみれば当たり前っちゃー当たり前でした。。。
他に組み合わせ定義があるのに、キーダウンした瞬間に実行されたら、他の組み合わせキーが動かなくなるしね。。。
自動的にキーアップでトリガーされるように切り替わるみたいです。
対策コード
こんな感じにしてみました。
F15:: ;F15キーを押した時 KeyWait, F15, T0.3 ;F15キーが離されるのを0.3秒以内に離されるのを待つ If (ErrorLevel){ ;離されなければ、ErrorLevelが1 Send,LF15 ;文字列1を出力 } else{ ;そうでなければ、 Send,SF15 ;文字列2を出力 } KeyWait, F15 ;F15が離されるのを待つ return WheelUp:: If (GetKeyState("F15","P")){ Send {Home} } else{ Send {WheelUp} } return WheelDown:: If (GetKeyState("F15","P")){ Send {End} } else{ Send {WheelDown} } return
これで、F15を短く押すと「SF15」、長く押すと「LF15」、F15を押しながらホイールを回すと、それぞれHomeとEndが実行されるようになった。
コメント