気付けば下らない内容だったんだけど、地味に嵌ったんでメモ。
下記のように記述して、ただ、lを押した時と、bを押しながらの場合と、Ctrlを押しながらの場合で別々の動作をさせようとした。
#UseHook On l:: If (GetKeyState("b","P")){ Send b{+}l } else If (GetKeyState("Ctrl","P")){ Send Ctrl{+}l } else { Send l } return
テストすると、l単独と、b+lはうまく動くが、Ctrl+lだけうまく動かない。
原因
Ctrlを押しながらlを押すと、AutoHotKeyには^lが飛ぶので、l::は実行されなかった。
実際、下記のように^l::のトリガーを記述をして、Ctrl+lを押してやると、「Ctrl+l2」が入力された。
#UseHook On l:: ;そもそもこちらに入らない If (GetKeyState("b","P")){ Send b{+}l } else If (GetKeyState("Ctrl","P")){ Send Ctrl{+}l ;当然こちらは実行されない。 } else { Send l } return ^l::Send Ctrl{+}l2 ;こちらが呼び出し
対策
「*l::」という風にアスタリスクを追加する。
これで、任意の修飾キー(Alt,Ctrl,Shift,Windows)の状態にかかわらず、lが押された時に実行されるようになる。
#UseHook On
*l::
If (GetKeyState("b","P")){
Send b{+}l
}
else If (GetKeyState("Ctrl","P")){
Send Ctrl{+}l
}
else {
Send l
}
return
なお、下記のように*lとは別に^lが存在すると、^lの方が優先される。
#UseHook On *l:: If (GetKeyState("b","P")){ Send b{+}l } else If (GetKeyState("Ctrl","P")){ Send Ctrl{+}l ;こちらは実行されない。 } else { Send l } return ^l::Send Ctrl{+}l2 ;Ctrl+lはこちらが優先されて実行される
関連
[AHK]$(ドルマーク)の効果検証
AutoHotKeyのキー修飾の「$」を見ると下記のような説明が書いてあるが、正直分かりにくい。 RegisterHotkey()ではなく、強制的にキーボードフックでイベントを取得する。(NT系専用)サブルーチン内でそのホットキー自身を送信...
[AHK]長押しで動作を切り換えるショートカットを作る。
AutoHotKeyで長押しの時の動作を変えたいと思ったんだけど、ちょっと嵌ったのでメモ。 ここのページを参考に、下記のように書いて走らせようとした。 F15:: ;F15キーを押した時 KeyWait, F15, T0.3 ;F15キーが...
[AHK]複数キー同時押し指定すると、単一キーで動かない
AutoHotKeyで、&で2つのキーを同時押したときの動作を指定すると、指定したキー単体を押したとき反応しなくなった。 設定してるのは、無変換キーを押しながら同時押しするとテンキーになるように設定したんだけど、無変換だけを押してもシグナル...
コメント