AutoHotkey には、さまざまな方法でキーストロークを送信する機能があります (SendRaw / SendInput / SendPlay / SendEvent)。単純なキー::キーマッピングがどのようなアプローチを使用するのかはよくわかりませんが、そのうちの 1 つに違いありません。私の推測では、SendRaw、SendInput、SendPlay、または SendEvent のいずれかがkey :: keyと同じように機能すると思います。
また、#IfWinActive は、特にフルスクリーン ゲームでは、期待どおりに動作しないことがあります。そのため、私は通常、#IfWinActive を使用せずに AHK スクリプトをテストして、正しく動作していることを確認しています。機能したら、条件を導入します。
アップデート
http://www.autohotkey.com/docs/misc/Remap.htmから:
スクリプトが起動されると、各再マッピングがホットキーのペアに変換されます。たとえば、a::bを含むスクリプトには、実際には代わりに次の 2 つのホットキーが含まれています。
*a::
SetKeyDelay -1 ; If the destination key is a mouse button, SetMouseDelay is used instead.
Send {Blind}{b DownTemp} ; DownTemp is like Down except that other Send commands in the script won't assume "b" should stay down during their Send.
return
*a up::
SetKeyDelay -1 ; See note below for why press-duration is not specified with either of these SetKeyDelays. If the destination key is a mouse button, SetMouseDelay is used instead.
Send {Blind}{b Up}
return
私のノート:
理由a::b
は機能していると思いa::Send b
ますが、a::b がボタン ダウン ハンドラーとボタン アップ ハンドラーを 2 つの別々のマッピングに分割する方法が原因ではありません。ゲームのゲームループはおそらくゲームプレイ キーをポーリングして「キーダウン」状態を確認しますが、AHK がリピートを合成している場合、これは一貫して維持されません。a_down->b_down および a_up->b_up を再マッピングすると、おそらく AHK はキーを押したままにする動作をより正確にエミュレートします。これは、特定の方法でキーの状態をテストするプログラムにとって重要になる場合があります (GetAsyncKeyState?)。
マッピングのアスタリスクは、「追加の修飾子が押されていてもホットキーを発射する」ことを意味します。