WinTitleパラメータと最後に見つかったウィンドウ

様々な組み込み関数にはWinTitleパラメータがあり、どのウィンドウ(または複数のウィンドウ)を操作するかを識別するために使用されます。このパラメータには、ウィンドウのタイトルまたは部分的なタイトル、および/またはこのページで説明されているその他の基準を指定することができます。

目次

Window Title & Matching Behaviour

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_classahk_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.

A(アクティブウィンドウ)

WinTitleにはアルファベットAを使用し、他の3つのウィンドウ・パラメーター(WinTextExcludeTitleExcludeText)を省略すると、アクティブなウィンドウに対して動作する。

以下の例では、アクティブウィンドウのユニークID(HWND)を取得し、報告している:

MsgBox WinExist("A")

次の例では、アクティブウィンドウを最大化するために押すホットキーを作成します:

#Up::WinMaximize "A"  ; Win+Up

ahk_ Criteria

次の ahk_ 基準を1つ以上 (オプションでウィンドウのタイトルに加えて) 指定し、それぞれを 1 スペースかタブで区切る (それ以外のスペースかタブは、前の基準のリテラル部分として扱われる)。ahk_基準は常に、ahk_キーワードとその基準値から成り、0個以上の空白またはタブで区切られる。For example, ahk_class Notepad identifies a Notepad window.

ahk_キーワードとその基準値は、スペースやタブで区切る必要はない。これは主に、変数と組み合わせてahk_基準を指定するときに便利です。例えば、"ahk_pid " PIDの代わりに"ahk_pid" PIDを指定することができる。しかし、それ以外の場合は、読みやすさを向上させるために、少なくとも1つのスペースかタブを区切りとして使用することが推奨される。

ahk_class (ウィンドウクラス)

ウィンドウクラスでウィンドウを識別するにはWinTitleahk_classClassNameを使う。

ウィンドウ・クラスは、システムがウィンドウを作成するためのテンプレートとして使用する属性のセットです。言い換えれば、ウィンドウのクラス名は、それがどのタイプのウィンドウであるかを識別する。ウィンドウクラスは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$"

ahk_id (Unique ID / HWND)

各ウィンドウやコントロールには固有のIDがあり、HWND(ウィンドウへのハンドルの略)としても知られている。This ID can be used to identify the window or control even if its title or text changes.

ahk_idHWNDを使用する、 HWND(つまり、ahk_id キーワードのない整数)、またはWinTitleの HWND プロパティを持つオブジェクトを使用して、一意の ID でウィンドウやコントロールを識別する。

DetectHiddenWindowsは、ahk_id基準が非表示のトップレベルウィンドウを検出するかどうかに影響するが、非表示のコントロールは常に検出される。また、(オブジェクト・プロパティまたは整数として)HWNDによって識別される隠しウィンドウが検出されるかどうかにも影響しますが、これはWinWaitまたはWinWaitCloseと共に使用される場合のみです。

ahk_id基準は、与えられたウィンドウがマッチしなければならない他の基準と組み合わせることもできる。例えば、WinExist("ahk_id " ahwnd " ahk_class " aclass)は、ウィンドウが(DetectHiddenWindowsに従って)"検出"され、そのウィンドウクラスがaclassに含まれる文字列と一致する場合、ahwndを返す。

ウィンドウのIDは通常、WinExistまたはWinGetIDで取得する。コントロールのIDは通常、ControlGetHwndMouseGetPos、またはDllCallで取得します。GuiGuiControlオブジェクトは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がスローされます。

ahk_pid (Process ID)

WinTitleahk_pidPIDを使用して、特定のプロセスに属するウィンドウを識別する。プロセス識別子(PID)は通常、WinGetPIDRunまたはProcess関数で取得される。ウィンドウのプロセスIDは、ウィンドウ・スパイで知ることができる。

次の例は、VarContainingPIDに格納されたプロセスIDによってウィンドウをアクティブにする:

WinActivate "ahk_pid " VarContainingPID

ahk_exe (Process Name/Path)

WinTitleahk_exeProcessNameOrPathを使って、与えられた名前やパスを持つプロセスに属するウィンドウを特定する。

ahk_pid 基準が特定のプロセスに限定されるのに対して、 ahk_exe 基準は、与えられた文字列と一致する名前またはフルパスを持つ すべてのプロセスを考慮する。RegExタイトル・マッチング・モードが有効な場合、ProcessNameOrPathは、プロセスのフル・パスにマッチしなければならない正規表現を受け付ける。それ以外の場合は、大文字と小文字を区別しない名前またはフルパスを受け付ける。例えば、ahk_exe notepad.exeは、ahk_exe C:\Windows\Notepad.exeahk_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.

ahk_group (Window Group)

WinTitleahk_groupGroupNameを使用して、以前に定義されたウィンドウグループに含まれるルールに一致するウィンドウを特定する。

WinMinimize, WinMaximize, WinRestore, WinHide, WinShow, WinClose, and WinKill will operate upon all the group's windows. 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パラメータに複数の基準を指定することで、検索範囲を狭めることができる。In the following example, the script waits for a window whose title contains My File.txt and whose class is 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."

ラストファウンドウィンドウ

これは、WinExistWinActiveWinWait[Not]ActiveWinWait、またはWinWaitCloseによって最近見つかったウィンドウである。ウィンドウ関数のたびにターゲットウィンドウのWinTitleWinTextを繰り返す必要がないので、スクリプトの作成と保守が簡単になる。さらに、スクリプトは、最初にターゲット・ウィンドウが見つかった後、再度検索する必要がないため、パフォーマンスが向上する。

最後に見つかったウィンドウは、WinWaitWinActivateBottomGroupAddWinGetCountWinGetListを除くすべてのウィンドウ関数で使用できる。これを使うには、4つのウィンドウ・パラメーター(WinTitleWinTextExcludeTitleExcludeText)をすべて省略すればよい。

つまり、現在のスレッドが他のスレッドによって中断された場合、元のスレッドが再開されると、中断されたスレッドの値ではなく、最後に見つかったウィンドウの元の値が保持される。

最後に見つかったウィンドウが非表示のGUIウィンドウの場合、DetectHiddenWindowsがオフになっていても使用できる。これはGUIの+LastFoundオプションと併用されることが多い。

次の例では、メモ帳を開き、それが存在するまで待ち、それを起動する:

Run "Notepad"
WinWait "Untitled - Notepad"
WinActivate ; Use the window found by WinWait.

次の例は、WinExistによって見つかったメモ帳ウィンドウをアクティブにし、最大化します:

if WinExist("Untitled - Notepad")
{
    WinActivate ; WinExistで見つかったウィンドウを使用します。
    WinMaximize ; Same as above.
    Send "Some text.{Enter}"
}

次の例は、WinExistによって見つかった電卓をアクティブにし、新しい位置に移動させます:

if not WinExist("Calculator")
{
    ; ...
}
else
{
    WinActivate ; Use the window found by WinExist.
    WinMove 40, 40 ; Same as above.
}