AutoHotkeyで3キー同時押しをトリガーにショートカットを設定


初めに

AutoHotkey、色々奥の深さは感じていたものの、深くリファレンスを読みこむ気力もなく検討していなかったのですが今回無変換キーが邪魔だったのでトライしてみました。
ググったり試行錯誤した上でようやくやりたいことが実現できたのですが、ネット上に掲題の内容についてサクッと解説してあるものがなかったので、個人的メモ含め記録として記載します。
ちなみに自分はプログラミングなど全く無関係な専攻と業界で生きており、趣味程度でプログラミングやってるものなので「これくらい分かれよ」というツッコミはぐっと押さえて温かい目で見ていただけると助かります。

実現したかったこと

使用しているMicrosoft SCULPT ERGONOMIC DESKTOP L5V-0では無変換キーが非常に大きいのに対し、使い道が少ない。
またノートパソコンのようにFnキー+Right、Leftの形で{Home}もしくは{End}を入力したい(=行末や行始点に移動したい)ため、
・無変換+Right→End
・無変換+left→Home
となるよう設定を試みた。

また、
・無変換+Shift+Right→ Shift+End(行末まで選択)
・無変換+Shift+left→ SHift+Home(行始点まで選択)
も併せて試みた

結論

当初設定していたスクリプトは以下だがエラーが出た

sample.ahk
vk1D & Right::Send {Home}
vk1D & +Right::Send +{Home} ;エラーとなる

というわけで
・無変換+Right→End
・無変換+left→Home
は可能だが、shiftが入る(入力キーが3つになる?)と上手く行かないようだった。

色々ググるとそもそも3つのキー同時入力は受け付けない?ようであった。
(詳しく調べてないので詳しい人教えて下さい)
よって、まず2つのキーが押下された瞬間、3つ目のキーが押下されているかIf文にて判別する方法があり、それを試したら上手く行った

sample2.ahk
vk1D & Right::
If GetKeyState("Shift", "P") {
            Send {Blind}{shift}
         Send {Blind}{End}
              }else{
              Send {End}
               }
Return

無変換+右キーが押された時GetKeyState("Shift", "P")でShiftキーが押されているときはShiftをsendしてからEndをsendし、それ以外はEndをsendするようにするに、という文である

{Blind}に関しては

修飾キーの自動復元
Sendコマンドが始まるとき、仮想的に修飾キーを離した状態になる。
コマンド終了時に、再びもとの状態に戻される。
この動作は、Keysの最初に {Blind}をつけることで無効化できる。

とのことなのでここではあったほうが良さそうである。

参考

キーバインドをカスタムして全能感を手に入れる【AutoHotKey, ChangeKey】
http://may46onez.hatenablog.com/entry/2019/04/21/001226

AutoHotkeyにおけるラベルの優先度と3キー同時押しの定義
http://did2.blog64.fc2.com/blog-entry-371.html

Autohotkeyでの同時押しショートカットキー実装方法 完全版
https://yuis-programming.com/?p=2135

ではまた。