[AHK]長押しで動作を切り換えるショートカットを作る。

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

コメント

PAGE TOP
Ads Block Detector Powered by codehelppro.com
Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました