FensterTitel-Parameter & Zuletzt Gefundenes Fenster

Verschiedene Befehle, Funktionen, Direktiven und Kontrollanweisungen haben einen FensterTitel-Parameter, der verwendet wird, um das/die Fenster zu identifizieren, mit dem/denen gearbeitet werden soll. Dieser Parameter kann der Titel des Fensters (teilweise oder vollständig) und/oder andere Kriterien sein, die auf dieser Seite beschrieben werden.

Inhaltsverzeichnis

Fenstertitel & Übereinstimmungsverhalten

Geben Sie eine beliebige Zeichenkette für FensterTitel an, um ein Fenster anhand seines Titels zu identifizieren. Der Titel eines Fensters befindet sich oft in einer Titelleiste ganz oben im Fenster. Wenn er versteckt oder nur teilweise sichtbar ist, kann der vollständige Fenstertitel via WinGetTitle oder mit dem internen Tool "Window Spy" in Erfahrung gebracht werden.

Das folgende Beispiel aktiviert den Taschenrechner:

WinActivate, Rechner

SetTitleMatchMode bestimmt, wie der angegebene Titel (teilweise oder vollständig) mit den Titeln anderer Fenster verglichen wird. Je nach Einstellung kann FensterTitel ein exakter Titel sein, ein Präfix enthalten, eine im Titel vorkommende Zeichenkette sein oder ein RegEx-Suchmuster sein. Diese Einstellung bestimmt auch, ob die Kriterien ahk_class und ahk_exe als RegEx-Suchmuster interpretiert werden.

Fenstertitel sind Groß-/Kleinschreibung-sensitiv, außer bei Verwendung des i)-Modifikators in einem RegEx-Suchmuster.

Versteckte Fenster werden nur erkannt, wenn DetectHiddenWindows eingeschaltet ist, mit Ausnahme von WinShow, das versteckte Fenster immer erkennt.

Wenn mehrere Fenster mit FensterTitel und anderen Kriterien übereinstimmen, wird das oberste gefundene Fenster verwendet. Wenn das aktive Fenster mit den Kriterien übereinstimmt, wird es üblicherweise bevorzugt, da dieses Fenster in der Regel über allen anderen Fenstern liegt. Wenn jedoch ein Immer-Im-Vordergrund-Fenster ebenfalls übereinstimmt (und das aktive Fenster nicht immer im Vordergrund ist), kann dieses stattdessen verwendet werden.

Nur die ersten 1023 Zeichen des angegebenen Fenstertitels, des ahk_class-Kriteriumwerts und des ahk_exe-Kriteriumwerts werden zum Finden einer Übereinstimmung berücksichtigt. Eine Überschreitung der Länge kann zu unerwarteten Ergebnissen führen, was selten vorkommt, aber häufiger vorkommen kann, wenn ein sehr langes RegEx-Suchmuster verwendet wird.

A (Aktives Fenster)

Verwenden Sie den Buchstaben A für FensterTitel und lassen Sie die anderen drei Fensterparameter (FensterText, AusnahmeTitel und AusnahmeText) weg, um mit dem aktiven Fenster zu arbeiten.

Das folgende Beispiel ermittelt und meldet die HWND-Nummer (eindeutige ID) des aktiven Fensters:

MsgBox % WinExist("A")

Das folgende Beispiel erstellt einen Hotkey, der gedrückt werden kann, um das aktive Fenster zu maximieren:

#Up::WinMaximize, A  ; WIN+NACH-OBEN

ahk_-Kriterien

Geben Sie eines oder mehrere der folgenden ahk_-Kriterien an (optional zusätzlich zum Titel eines Fensters), die jeweils durch genau ein Leer- oder Tabulatorzeichen voneinander getrennt sind (alle anderen Leer- oder Tabulatorzeichen werden als Teil des vorherigen Kriteriums angesehen). Ein ahk_-Kriterium besteht immer aus einem ahk_-Schlüsselwort und seinem Kriteriumwert, getrennt durch beliebig viele Leer- oder Tabulatorzeichen. Zum Beispiel identifiziert ahk_class Notepad ein Notepad-Fenster.

Das ahk_-Schlüsselwort und sein Kriteriumwert müssen nicht zwingend durch Leer- oder Tabulatorzeichen voneinander getrennt werden. Dies ist hauptsächlich nützlich, wenn ahk_-Kriterien als Ausdrücke in Kombination mit Variablen angegeben werden. Zum Beispiel können Sie "ahk_pid" PID statt "ahk_pid " PID angeben. In allen anderen Fällen wird jedoch empfohlen, mindestens ein Leer- oder Tabulatorzeichen als Trennung zu verwenden, um die Lesbarkeit zu verbessern.

ahk_class (Fensterklasse)

Verwenden Sie ahk_class Klassenname in FensterTitel, um ein Fenster anhand seiner Fensterklasse zu identifizieren. Nur die ersten 1023 Zeichen von Klassenname werden zum Finden einer Übereinstimmung berücksichtigt.

Eine Fensterklasse ist eine Reihe von Attributen, die das System als Vorlage für die Erstellung eines Fensters verwendet. Mit anderen Worten, der Klassenname des Fensters gibt an, um welche Art von Fenster es sich handelt. Eine Fensterklasse kann mit Window Spy in Erfahrung gebracht oder mit WinGetClass abgerufen werden. Wenn der RegEx-Titelübereinstimmungsmodus aktiv ist, akzeptiert Klassenname einen regulären Ausdruck.

Das folgende Beispiel aktiviert ein Konsolenfenster (z.B. cmd.exe):

WinActivate, ahk_class ConsoleWindowClass

Das folgende Beispiel macht dasselbe wie oben, verwendet aber einen regulären Ausdruck (beachten Sie, dass dafür der RegEx-Titelübereinstimmungsmodus vorher eingeschaltet werden muss):

WinActivate, ahk_class i)^ConsoleWindowClass$

ahk_id (Eindeutige ID / HWND)

Verwenden Sie ahk_id HWND in FensterTitel, um ein Fenster oder ein Steuerelement über dessen eindeutige ID zu identifizieren.

Jedes Fenster oder Steuerelement hat eine eindeutige ID, auch bekannt als HWND (kurz für "Handle to Window"). Diese ID kann zur Identifizierung des Fensters oder Steuerelements verwendet werden, selbst wenn sich dessen Titel oder Text ändert. Die ID eines Fensters wird üblicherweise via WinExist() oder WinGet abgerufen. Die ID eines Steuerelements wird üblicherweise via ControlGet Hwnd, MouseGetPos oder DllCall() abgerufen. Außerdem funktioniert das ahk_id-Kriterium auch für versteckte Steuerelemente, d.h. die Einstellung von DetectHiddenWindows hat keinen Einfluss auf Steuerelemente.

Das folgende Beispiel aktiviert ein Fenster mit einer eindeutigen ID, die in VarMitID gespeichert ist:

WinActivate, ahk_id %VarMitID%

ahk_pid (Prozess-ID)

Verwenden Sie ahk_pid PID in FensterTitel, um ein Fenster zu identifizieren, das zu einem bestimmten Prozess gehört. Der Prozessidentifikator (PID) wird üblicherweise via WinGet, Run oder Process abgerufen. Die ID des Prozesses eines Fensters kann via Window Spy in Erfahrung gebracht werden.

Das folgende Beispiel aktiviert ein Fenster mit einer Prozess-ID, die in VarMitPID gespeichert ist:

WinActivate, ahk_pid %VarMitPID%

ahk_exe (Prozessname/-pfad) [v1.1.01+]

Verwenden Sie ahk_exe ProzessNameOderPfad in FensterTitel, um ein Fenster zu identifizieren, das zu einem Prozess mit dem angegebenen Namen oder Pfad gehört. Nur die ersten 1023 Zeichen von ProzessNameOderPfad werden zum Finden einer Übereinstimmung berücksichtigt.

Während das ahk_pid-Kriterium auf einen bestimmten Prozess beschränkt ist, berücksichtigt das ahk_exe-Kriterium alle Prozesse, deren Name oder vollständiger Pfad mit einer bestimmten Zeichenkette übereinstimmt. Wenn der RegEx-Titelübereinstimmungsmodus aktiv ist, akzeptiert ProzessNameOderPfad einen regulären Ausdruck, der mit dem vollständigen Pfad des Prozesses übereinstimmen muss. Andernfalls akzeptiert es einen nicht-Groß-/Kleinschreibung-sensitiven Namen oder vollständigen Pfad. Zum Beispiel bewirkt ahk_exe notepad.exe, dass ahk_exe C:\Windows\Notepad.exe, ahk_exe C:\Windows\System32\Notepad.exe und andere Variationen gefunden werden. Der Name des Prozesses eines Fensters kann via Window Spy in Erfahrung gebracht werden.

Das folgende Beispiel aktiviert ein Notepad-Fenster über dessen Prozessnamen:

WinActivate, ahk_exe notepad.exe

Das folgende Beispiel macht dasselbe wie oben, verwendet aber einen regulären Ausdruck (beachten Sie, dass dafür der RegEx-Titelübereinstimmungsmodus vorher eingeschaltet werden muss):

WinActivate, ahk_exe i)\\notepad\.exe$  ; Stimmt mit dem Namensteil des vollständigen Pfads überein.

ahk_group (Fenstergruppe)

Verwenden Sie ahk_group GruppeName in FensterTitel, um ein oder mehrere Fenster zu identifizieren, die den Regeln einer zuvor definierten Fenstergruppe entsprechen.

WinMinimize, WinMaximize, WinRestore, WinHide, WinShow, WinClose und WinKill arbeiten mit allen Fenstern der Gruppe. Andere fensterspezifische Befehle wie WinActivate, WinExist() und IfWinExist arbeiten hingegen nur mit dem obersten Fenster der Gruppe.

Das folgende Beispiel aktiviert alle Fenster, die den Kriterien einer Fenstergruppe entsprechen:

; Die Gruppe definieren: Windows-Explorer-Fenster
GroupAdd, Explorer, ahk_class ExploreWClass ; Unbenutzt in Vista und höher
GroupAdd, Explorer, ahk_class CabinetWClass

; Alle Fenster aktivieren, die den obigen Kriterien entsprechen
WinActivate, ahk_group Explorer

Mehrere Kriterien

Im Gegensatz zum ahk_group-Kriterium (das die Suche erweitert) kann die Suche durch Angabe von mehr als einem Kriterium im FensterTitel-Parameter eingeschränkt werden. Im folgenden Beispiel wartet das Skript auf ein Fenster, dessen Titel Meine Datei.txt enthält und dessen Klasse Notepad ist:

WinWait Meine Datei.txt ahk_class Notepad
WinActivate  ; Das zuvor gefundene Fenster aktivieren.

Bei Verwendung dieser Methode sollte der Text des Titels (falls gewünscht) zuerst aufgelistet werden, gefolgt von einem oder mehreren zusätzlichen Kriterien. Die Kriterien müssen jeweils mit genau einem Leer- oder Tabulatorzeichen voneinander getrennt werden (jedes weitere Leer- oder Tabulatorzeichen wird als Teil des vorherigen Kriteriums betrachtet).

Das ahk_id-Kriterium kann mit anderen Kriterien kombiniert werden, um den Titel, die Klasse oder andere Attribute des Fensters zu testen:

MouseGetPos,,, id
if WinExist("ahk_class Notepad ahk_id " id)
    MsgBox Der Mauszeiger befindet sich über Notepad.

Zuletzt Gefundenes Fenster

Das Fenster, das zuletzt von IfWinExist, IfWinNotExist, WinExist(), IfWinActive, IfWinNotActive, WinActive(), WinWaitActive, WinWaitNotActive oder WinWait gefunden wurde. Dieses Fenster kann die Erstellung und Pflege von Skripten erleichtern, da nicht für jeden fensterspezifischen Befehl die Parameter FensterTitel und FensterText zum Identifizieren des Zielfensters angegeben werden müssen. Außerdem wird dadurch die Performanz von Skripten verbessert, da das Zielfenster, wenn es einmal gefunden wurde, nicht erneut gesucht werden muss.

Das zuletzt gefundene Fenster kann von allen fensterspezifischen Befehlen außer WinWait, WinActivateBottom, GroupAdd, WinGet Count und WinGet List verwendet werden. Um es zu verwenden, lassen Sie einfach alle vier Fensterparameter (FensterTitel, FensterText, AusnahmeTitel und AusnahmeText) weg.

Jeder Thread hat seinen eigenen Wert des zuletzt gefundenen Fensters, d.h. wenn der aktuelle Thread von einem anderen unterbrochen wird, hat der ursprüngliche Thread bei Wiederaufnahme immer noch seinen originalen Wert des zuletzt gefundenen Fensters, nicht den des unterbrechenden Threads.

Wenn das zuletzt gefundene Fenster ein verstecktes GUI-Fenster ist, kann es auch verwendet werden, wenn DetectHiddenWindows ausgeschaltet ist. Dies wird oft in Verbindung mit Gui +LastFound verwendet.

Das folgende Beispiel öffnet Notepad, wartet bis es existiert und aktiviert es:

Run Notepad
WinWait Unbenannt - Editor
WinActivate ; Verwendet das von WinWait gefundene Fenster.

Das folgende Beispiel aktiviert und maximiert das von WinExist() gefundene Notepad-Fenster:

if WinExist("Unbenannt - Editor")
{
    WinActivate ; Verwendet das von WinExist gefundene Fenster.
    WinMaximize ; Dasselbe wie oben.
    Send, Dies ist ein Text.{Enter}
}

Das folgende Beispiel aktiviert den von WinExist() gefundenen Taschenrechner und verschiebt ihn auf eine neue Position:

if not WinExist("Rechner")
{
    ; ...
}
else
{
    WinActivate ; Verwendet das von WinExist gefundene Fenster.
    WinMove, 40, 40 ; Dasselbe wie oben.
}