menu
書いてる野郎
orebike@gmail.com
かなり昔からある 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言語式のブロックコメントが使える。
注意する点として、なんだか日本語のコメントは使わないほうがよいらしい。 解釈を誤ってコメントの終端を判定できず範囲外もコメント扱いになってしまうことがあるらしい。