#IfWinActive / #IfWinExist

ホットキーを特定のウィンドウのアクティブ/存在時のみ有効になるように設定する

#IfWinActive [, WinTitle, WinText]
#IfWinExist [, WinTitle, WinText]
#IfWinNotActive [, WinTitle, WinText]
#IfWinNotExist [, WinTitle, WinText]

Parameters

引数名説明
WinTitle ウィンドウタイトルなどの条件を指定。
ウィンドウ指定の方法参照。
ただし、ウィンドウタイトルとahk_class、ahk_group、それらの複数条件の同時指定のみ有効。
ahk_idとahk_pidは、一応機能するが、あらかじめ知っておくことができないのでほとんど意味がない。
「%VarName%」のような変数参照は、今のところ使用できない。
ただし、将来の拡張のために、「%」記号は「`%」のようにエスケープしておくこと。
WinText ウィンドウに含まれるテキストの条件を指定。
引数の数が増やされることもあり得るので、「,」は「`,」のようにエスケープすること。

Remarks

この指令が記述された部分より後で定義されるホットキーは、記述された条件に一致しているときのみ有効になる。
#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は当該ウィンドウに設定される。

Related

Hotkeys, Hotstrings, Suspend, Hotkey command, IfWinActive, IfWinExist, SetTitleMatchMode, DetectHiddenWindows

Examples

#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