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が実行されるようになった。


コメント