様々な組み込み関数にはWinTitleパラメータがあり、どのウィンドウ(または複数のウィンドウ)を操作するかを識別するために使用されます。このパラメータには、ウィンドウのタイトルまたは部分的なタイトル、および/またはこのページで説明されているその他の基準を指定することができます。
Specify any string for WinTitle to identify a window by its title. The title of a window is often visible as text in a title bar at the top of the window. If invisible or only partially visible, the full window title can be revealed via WinGetTitle or Window Spy.
The following example activates the calculator:
WinActivate "Calculator"
SetTitleMatchModeは、部分的または完全なタイトルを各ウィンドウのタイトルと比較する方法を制御します。設定によって、WinTitleは正確なタイトルになるか、接頭辞、タイトル内の任意の場所に出現する部分文字列、またはRegExパターンを含むことができる。この設定は、ahk_classとahk_exe基準を RegEx パターンとして解釈するかどうかも制御する。
RegExパターンでi)修飾子を使用する場合を除き、ウィンドウタイトルは大文字と小文字を区別する。
隠しウィンドウはDetectHiddenWindowsがオンになっている場合のみ検出されるが、WinShowでは常に検出される。
複数のウィンドウがWinTitleとその他の条件に一致する場合、一番上のウィンドウが使用される。アクティブなウィンドウが条件に一致する場合、通常は他のすべてのウィンドウより上にあるため、そのウィンドウが優先される。ただし、常時オンのウィンドウも一致する場合(そしてアクティブなウィンドウが常時オンでない場合)には、そのウィンドウが代わりに使われることもある。
In [v2.0.6+], it is no longer the case that only the first 1023 characters of the specified window title, ahk_class criterion value, and ahk_exe criterion value are considered for matching purposes. Exceeding the length no longer leads to unexpected results, which rarely occurs, but may be encountered more often if a very long RegEx pattern is used.
WinTitleにはアルファベットA
を使用し、他の3つのウィンドウ・パラメーター(WinText、ExcludeTitle、ExcludeText)を省略すると、アクティブなウィンドウに対して動作する。
以下の例では、アクティブウィンドウのユニークID(HWND)を取得し、報告している:
MsgBox WinExist("A")
次の例では、アクティブウィンドウを最大化するために押すホットキーを作成します:
#Up::WinMaximize "A" ; Win+Up
次の ahk_ 基準を1つ以上(オプションでウィンドウのタイトルに加えて)指定し、それぞれを 1 スペースかタブで区切る(それ以外のスペースかタブは、前の基準のリテラル部分として扱われる)。ahk_基準は常に、ahk_キーワードとその基準値から成り、0個以上の空白またはタブで区切られる。For example, ahk_class Notepad
identifies a Notepad window.
ahk_キーワードとその基準値は、スペースやタブで区切る必要はない。これは主に、変数と組み合わせてahk_基準を指定するときに便利です。例えば、"ahk_pid " PID
の代わりに"ahk_pid" PID
を指定することができる。しかし、それ以外の場合は、読みやすさを向上させるために、少なくとも1つのスペースかタブを区切りとして使用することが推奨される。
ウィンドウクラスでウィンドウを識別するにはWinTitleのahk_class ClassName
を使う。
ウィンドウ・クラスは、システムがウィンドウを作成するためのテンプレートとして使用する属性のセットです。言い換えれば、ウィンドウのクラス名は、それがどのタイプのウィンドウであるかを識別する。ウィンドウクラスはWindow Spyで公開したり、WinGetClassで取得することができます。RegExタイトル・マッチ・モードが有効な場合、ClassNameは正規表現を受け付けます。
Window classes are case-sensitive, except when using the i) modifier in a RegEx pattern.
次の例は、コンソール・ウィンドウ(cmd.exeなど)をアクティブにします:
WinActivate "ahk_class ConsoleWindowClass"
次の例は上記と同じだが、正規表現を使っている(動作させるには、RegExのタイトルマッチングモードをあらかじめオンにしておく必要があることに注意):
WinActivate "ahk_class ^ConsoleWindowClass$"
各ウィンドウやコントロールには固有のIDがあり、HWND(ウィンドウへのハンドルの略)としても知られている。This ID can be used to identify the window or control even if its title or text changes.
Use ahk_id HWND
or a pure HWND (as an Integer or an Object with a HWND property) in WinTitle to identify a window or control by its unique ID.
When using ahk_id HWND
, DetectHiddenWindows affects whether hidden top-level windows are detected, but hidden controls are always detected. When using pure HWNDs, hidden windows are always detected regardless of DetectHiddenWindows. WinWait and WinWaitClose are an exception, where both ahk_id HWND
and pure HWNDs are affected by DetectHiddenWindows.
ahk_id HWND
can also be combined with other criteria that the given window must match. 例えば、WinExist("ahk_id " ahwnd " ahk_class " aclass)
は、ウィンドウが(DetectHiddenWindowsに従って)"検出"され、そのウィンドウクラスがaclassに含まれる文字列と一致する場合、ahwndを返す。
ウィンドウのIDは通常、WinExistまたはWinGetIDで取得する。コントロールのIDは通常、ControlGetHwnd、MouseGetPos、またはDllCallで取得します。Guiと GuiControlオブジェクトはHwnd
プロパティを持っているので、WinTitleで直接使うことができます。
以下の例は、VarContainingIDに格納された一意のIDによってウィンドウを操作する:
; Pass an Integer. WinActivate Integer(VarContainingID) WinShow A_ScriptHwnd WinWaitNotActive WinExist("A") ; Pass an Object with a HWND property. WinActivate {Hwnd: VarContainingID} WinWaitClose myGuiObject ; Use the ahk_id prefix. WinActivate "ahk_id " VarContainingID
オブジェクトにHWNDプロパティがないか、プロパティの値が整数でない場合、PropertyErrorまたはTypeErrorがスローされます。
WinTitleでahk_pid PID
を使用して、特定のプロセスに属するウィンドウを識別する。プロセス識別子(PID)は通常、WinGetPID、RunまたはProcess関数で取得される。ウィンドウのプロセスIDは、ウィンドウ・スパイで知ることができる。
次の例は、VarContainingPIDに格納されたプロセスIDによってウィンドウをアクティブにする:
WinActivate "ahk_pid " VarContainingPID
WinTitleのahk_exe ProcessNameOrPath
を使って、与えられた名前やパスを持つプロセスに属するウィンドウを特定する。
ahk_pid 基準が特定のプロセスに限定されるのに対して、 ahk_exe 基準は、与えられた文字列と一致する名前またはフルパスを持つ すべてのプロセスを考慮する。RegExタイトル・マッチング・モードが有効な場合、ProcessNameOrPathは、プロセスのフル・パスにマッチしなければならない正規表現を受け付ける。それ以外の場合は、大文字と小文字を区別しない名前またはフルパスを受け付ける。例えば、ahk_exe notepad.exe
は、ahk_exe C:\Windows\Notepad.exe
、ahk_exe C:\Windows\System32\Notepad.exe
などのバリエーションをカバーする。ウィンドウのプロセス名は、ウィンドウ・スパイ(Window Spy)を通じて知ることができる。
次の例は、プロセス名でメモ帳ウィンドウをアクティブにする:
WinActivate "ahk_exe notepad.exe"
次の例は上記と同じだが、正規表現を使っている(動作させるには、RegExのタイトルマッチングモードをあらかじめオンにしておく必要があることに注意):
WinActivate "ahk_exe i)\\notepad\.exe$" ; Match the name part of the full path.
WinTitleの ahk_group GroupName
を使用して、以前に定義されたウィンドウグループに含まれるルールに一致するウィンドウを特定する。
WinMinimize、WinMaximize、WinRestore、WinHide、WinShow、WinClose、WinKillは、グループのすべてのウィンドウに対して作用します。By contrast, the other windowing functions such as WinActivate and WinExist will operate only upon the topmost window of the group.
次の例は、ウィンドウ・グループで定義された条件に一致するウィンドウをアクティブにします:
; Define the group: Windows Explorer windows GroupAdd "Explorer", "ahk_class ExploreWClass" ; Unused on Vista and later GroupAdd "Explorer", "ahk_class CabinetWClass" ; Activate any window matching the above criteria WinActivate "ahk_group Explorer"
ahk_group基準(検索範囲を広げる)とは対照的に、WinTitleパラメータに複数の基準を指定することで、検索範囲を狭めることができる。次の例では、スクリプトは、タイトルがMy File.txt 、クラスがNotepadのウィンドウを待つ:
WinWait "My File.txt ahk_class Notepad" WinActivate ; Activate the window it found.
この方法を使用する場合、タイトルのテキスト(必要な場合)を最初に記載し、その後に1つ以上の追加基準を記載する。1つ目以降の基準は、正確に1つのスペースまたはタブで区切らなければならない(それ以外のスペースまたはタブは、前の基準のリテラル部分として扱われる)。
ahk_id基準は、ウィンドウのタイトル、クラス、その他の属性をテストするために、他の基準と組み合わせることができます:
MouseGetPos ,, &id if WinExist("ahk_class Notepad ahk_id " id) MsgBox "The mouse is over Notepad."
これは、WinExist、WinActive、WinWait[Not]Active、WinWait、またはWinWaitCloseによって最近見つかったウィンドウである。ウィンドウ関数のたびにターゲットウィンドウのWinTitleと WinTextを繰り返す必要がないので、スクリプトの作成と保守が簡単になる。さらに、スクリプトは、最初にターゲット・ウィンドウが見つかった後、再度検索する必要がないため、パフォーマンスが向上する。
最後に見つかったウィンドウは、WinWait、WinActivateBottom、GroupAdd、WinGetCount、WinGetListを除くすべてのウィンドウ関数で使用できる。これを使うには、4つのウィンドウ・パラメーター(WinTitle、WinText、ExcludeTitle、ExcludeText)をすべて省略すればよい。
各スレッドは、最後に見つかったウィンドウの値を保持する。つまり、現在のスレッドが他のスレッドによって中断された場合、元のスレッドが再開されると、中断されたスレッドの値ではなく、最後に見つかったウィンドウの元の値が保持される。
最後に見つかったウィンドウが非表示のGUIウィンドウの場合、DetectHiddenWindowsがオフになっていても使用できる。これはGUIの+LastFoundオプションと併用されることが多い。
次の例では、メモ帳を開き、それが存在するまで待ち、それを起動する:
Run "Notepad" WinWait "Untitled - Notepad" WinActivate ; WinWait関数で見つかったウィンドウが対象となります。
次の例は、WinExistによって見つかったメモ帳ウィンドウをアクティブにし、最大化します:
if WinExist("Untitled - Notepad") { WinActivate ; WinExistで見つかったウィンドウを使用します。 WinMaximize ; Same as above. Send "Some text.{Enter}" }
次の例は、WinExistによって見つかった電卓をアクティブにし、新しい位置に移動させます:
if not WinExist("Calculator") { ; ... } else { WinActivate ; WinExistで見つかったウィンドウを使用します。 WinMove 40, 40 ; Same as above. }