イントロダクションキーリマップとはその名の通りキーの置き換えを行うもので、「キーAとキーBを入れ替える」といった用途に利用する。 AutoHotkeyの機能は純然たるリマップではないが、ウィンドウ毎にリマップ定義を行えたりするなどのメリットがある。 純リマップであるレジストリのスキャンコードマップを変更してリマップを行う事との違い、およびメリット・デメリットは後述する。 なおリマップ機能には以下の制限事項がある。あらかじめ注意されたし。 リマップの定義方法
a::b このとき、Shift+AはShift+Bに、Ctrl+AはCtrl+Bにというように、あらゆる状態でキーの変換が有効になる。 以下は、二つのキーを入れ替えになる。 a::b 以下の例では、Shiftを押しながらAを押したときは、 +a::b 置換先キーには1キーで入力が出来ないものも指定できる。 a::B
上記以外でも、置換元キー、置換先キーには、 キー名は キーリスト のものが利用できる。
ただし、WheelUp/WheelDownは使用できない。また、 XButton2::^c Remarks#IfWinActive等を使うことで、ホットキー同様に特定のウィンドウのみにリマップを適応できる。 ; メモ帳でのみ 'a' を押すと 'b' が出力する #IfWinActive ahk_class Notepad a::b #IfWinActive リマップはホットキーに比べて以下の点で優れる
リマップによって発行されたキーで通常のホットキーの発動が可能。 しかし、マウスボタンやフックを使ったキーのホットキーを発動させることはできない。 (ホットキーがどの種類であるかは ListHotkeysコマンド、またはAutoHotkeyのメインウィンドウの「メニュー>View>Hotkeys and their methods」で確認できる)
置換先キーの出力方式は、AutoExecuteセクションの終了時点でSendModeで設定されていた方式が使用される。 リマップはホットキーに変換される
リマップはスクリプトの実行時にはホットキーに変換される。例えば「 *a::
SetKeyDelay -1 ; 置換先がマウスの場合は SetMouseDelayになる
Send {Blind}{b DownTemp} ; "DownTemp"は"Down"に似ているが押下中はキーリピートを送る
return
*a up::
SetKeyDelay -1 ; PressDurationパラメタを指定しない理由は後述
Send {Blind}{b Up}
return
しかし上記のホットキーは以下の状況で変化する
備考: このケースでは SetKeyDelay の第2パラメタの PressDuration を省略している。 これは PressDuration は Upのみ、Downのみの場合には適応されないためである。 しかし、Shift,Ctrl,Alt,Winの修飾キーの影響をうけるの。 従って、Auto-executeセクションで設定した PressDuration が全てのリマップに適応されることになる。
コンビネーションキーも直接リマップは出来ない( 上述のように、リマップはホットキーになるので、Suspendコマンドによってリマップも通常のホットキーと同様に無効になる。 従って、以下のようにすればリマップを個別に無効化することもできる。 Hotkey, *a, off Hotkey, *a up, off Alt+Tab問題
リマップ機能を用いて、あるキー(ここでは仮にXとする)に Alt キーを割り当てたとき、
Alt+Tab の代わりに X+Tab を押してタスク切り替えようとしてもうまくいかない。
解決策としてホットキー定義「 リマップにおけるキー指定
置換元キーとして キーリストにあるキーやマウスボタン名だけでなく、
仮想キーコード(VKnn) や スキャンコード(Scnnn) も利用できる。
これは、スキャンコードが後に付く仮想キーコード(VKnnScnnn)を除き、置換先キーでも同様。
例えば、多くのキーボードで
リマップでなく単にキーを無効化したい場合は、ホットキー機能を用いて何もさせない
レジストリのスキャンコードマップを変更してリマップを行うレジストリにはキーボードからのキー入力信号を置き換えるスキャンコードマップというエントリがある。 これは実際に入力されたキー入力信号を他のキー信号に置き換える設定を格納している。 キー入力があるとこの設定を用いてキーの置き換えを行い、 OSを含む全てのアプリケーションは置き換え後のキーを実際のキー入力として扱う。 なおデフォルトでこのエントリは空(リマップ無し)になっている。 一方、AutoHotkeyのリマップ機能はフック機能を用いてリマップ実現している。 キー入力を各ウィンドウに通知する直前に捕え、リマップ対象のキーである場合キー入力を捨てて、 新たなキー入力イベントを発生させるという方法を採っている。 レジストリでのリマップを利用するメリットとデメリット:
日本語キーボード固有の問題にレジストリを用いたリマップで対応する通常の日本語キーボードには 単体で CapsLock を行うキーがない。 このため CapsLock と Ctrl の入れ替えを AutoHotkey 単体で行うことができない。 このような場合、上述のスキャンコードマップを入れ替えることで対応するのが確実である。 なお、OSの機能でリマップしたキーをAutoHotkeyでリマップやホットキーを割り当てることも可能である。 |