ホットキーを特定のウィンドウのアクティブ/存在時のみ有効になるように設定する
#IfWinActive [, WinTitle, WinText] #IfWinExist [, WinTitle, WinText] #IfWinNotActive [, WinTitle, WinText] #IfWinNotExist [, WinTitle, WinText]
引数名 | 説明 |
---|---|
WinTitle |
ウィンドウタイトルなどの条件を指定。 ウィンドウ指定の方法参照。 ただし、ウィンドウタイトルとahk_class、ahk_group、それらの複数条件の同時指定のみ有効。 ahk_idとahk_pidは、一応機能するが、あらかじめ知っておくことができないのでほとんど意味がない。 「%VarName%」のような変数参照は、今のところ使用できない。 ただし、将来の拡張のために、「%」記号は「`%」のようにエスケープしておくこと。 |
WinText |
ウィンドウに含まれるテキストの条件を指定。 引数の数が増やされることもあり得るので、「,」は「`,」のようにエスケープすること。 |
この指令が記述された部分より後で定義されるホットキーは、記述された条件に一致しているときのみ有効になる。
#IfWinActiveでは指定ウィンドウがアクティブの時のみ、#IfWinExistでは指定ウィンドウが存在するときのみ、#IfWinNotActiveでは指定ウィンドウがアクティブではないときのみ、#IfWinNotExistでは指定ウィンドウが存在しないときのみ有効になる。
AltTabホットキーはこれらの指令の条件にかかわらず、常に有効になる。
これらの条件は、最後に指定した物一つのみが有効になる。
「#IfWinActive」のように全ての引数を省略して記述すると、条件が「条件無し」になる。
条件ごとに同じホットキーに別の動作を割り当てることができる。
#IfWinActive ahk_class Notepad ^!c::MsgBox You pressed Control+Alt+C in Notepad. #IfWinActive ahk_class WordPadClass ^!c::MsgBox You pressed Control+Alt+C in WordPad. #IfWinActive ^!c::MsgBox You pressed Control+Alt+C in a window other than Notepad/WordPad.
「#IfWinActive ahk_class Notepad」と「#IfWinExist ahk_class Notepad」のように、複数の同時に成立し得る条件にアクションを設定してある場合、一番最初に設定された条件付きアクションが優先される。
一致する条件が一つもない場合、「条件無し」で設定されたアクションが実行される。
「条件無し」でのアクションも設定されていない場合、そのキーの本来の動作が行われる。(WindowsNT系のみ)
「Gosub,^!c」のようにしてホットキーラベルへ直接ジャンプする場合、条件にかかわらずスクリプトの一番最初に現れるホットキーラベルにジャンプする。
スクリプト実行中にHotkeyコマンドを使用すると、スクリプトの最後で指定されていた条件下でのホットキーアクションが設定・変更される。
「Hotkey,IfWinActive,ahk_class Notepad」のように、IfWin...系サブコマンドで、条件を変更したり「条件無し」にしたりできる。
通常、「a & b」のようなコンビネーションキーを指定していると、プレフィクスキー(先に書かれた方のキー)の本来の機能は無効になる。
しかし、そのキーをプレフィクスとして使用するコンビネーションキーが全て条件により無効になっているときは、そのキー本来の動作が行われる。
IfWinActiveおよびIfWinExistの条件が付いたホットキーサブルーチンが実行されるとき、LastFoundWindowは当該ウィンドウに設定される。
Hotkeys, Hotstrings, Suspend, Hotkey command, IfWinActive, IfWinExist, SetTitleMatchMode, DetectHiddenWindows
#IfWinActive ahk_class Notepad ^!a::MsgBox You pressed Ctrl-Alt-A while Notepad is active. ; This hotkey will have no effect if pressed in other windows (and it will "pass through"). #c::MsgBox You pressed Win-C while Notepad is active. ::btw::This replacement text for "btw" will occur only in Notepad. #IfWinActive #c::MsgBox You pressed Win-C in a window other than Notepad.
#IfWinExist ahk_class Notepad +#n::WinActivate #IfWinExist +#n::Run,notepad.exe