AutoHotkey

かなり昔からある Windows 向けの定番キーバインド変更ツール

ここでは Windows10 環境で AutoHotkey 1.1 64bit unicode バージョンを使っているものとする。

再帰的?

キーへの割当は基本的に再帰的に行われる。 b に a を割立て、その後に c に b を割り当てたならば、c は a として動作する。

特に同一キー操作を同一キーに割り当てた場合無限ループになる。

操作対象のキーに対してドル記号をつけると、それは本来有るべき標準状態でのキーを指す(割り当て前)ことになり操作が循環することは無い。

連続的なキーの送出

一連のキー操作を連続的に送出したい場合は並べてずらずら書く。

セミコロンに続き Enter を送出したいなら並べて書く。

send,{`;}{Enter}

コンマに機能を割り当てる

何やらコンマだけは特別なようで普通に書いても invalid と判定されるのでスキャンコードを使って記述する。

コンマの動作を殺すならこうなる。このsc033というのが、コンマのスキャンコードとなる。

sc033::return

句読点で確定する

日本語入力において「、」「。」を打つタイミングは確実に文章の変換が完了して確定が完了している状態なので、これを入力した瞬間に変換を確定させてしまいたい。なので、そのようにしたいのだが、IME側でこのような設定が無いようなので autohotkey で対応する。

設定としてIMEのオンオフ状態を取る必要がある。調べると簡単に見つかったのでそれを適当にコピペして仕上げる。

こうなる。

`;::
   WinGet, vcurrentwindow, ID, A
   vimestate := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint", vcurrentwindow), "UInt", 0x0283, "Int", 0x0005, "Int", 0)
   If vimestate = 0
     send,{`;}
   Else
   {
     send,{`;}{Enter}
   }
return
sc033::
   WinGet, vcurrentwindow, ID, A
   vimestate := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint", vcurrentwindow), "UInt", 0x0283, "Int", 0x0005, "Int", 0)
   If vimestate = 0
     send,{`,}
   Else
   {
     send,{`,}{Enter}
   }
return

特に何もない。自分の場合はIMEのローマ字設定を変えていてセミコロンで「。」が入力できるようにしている。

コメント

行頭セミコロンか、明らかにキーボードの入力のセミコロン以外で使われている場合の状況でのセミコロン以降がコメントとして扱われる。

それ以外にもC言語式のブロックコメントが使える。

注意する点として、なんだか日本語のコメントは使わないほうがよいらしい。 解釈を誤ってコメントの終端を判定できず範囲外もコメント扱いになってしまうことがあるらしい。

keyboard/tool/autohotkey/start.txt · 最終更新: 2021-11-09 13:05 by ore