FensterTitel-Parameter & Zuletzt Gefundenes Fenster

Verschiedene interne Funktionen 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.

In [v2.0.6+] werden nicht mehr nur die ersten 1023 Zeichen des angegebenen Fenstertitels, des ahk_class-Kriteriumwerts und des ahk_exe-Kriteriumwerts zum Finden einer Übereinstimmung berücksichtigt. Eine Überschreitung der Länge kann nicht länger 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 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.

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.

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

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 ^ConsoleWindowClass$"

ahk_id (Eindeutige ID / HWND)

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.

Verwenden Sie ahk_id HWND, HWND (einen Integer ohne das ahk_id-Schlüsselwort) oder ein Objekt mit einer HWND-Eigenschaft in FensterTitel, um ein Fenster oder ein Steuerelement über dessen eindeutige ID zu identifizieren.

DetectHiddenWindows beeinflusst, ob das ahk_id-Kriterium versteckte Top-Level-Fenster erkennt (während versteckte Steuerelemente immer erkannt werden). Es hat auch Einfluss darauf, ob versteckte Fenster, die durch eine HWND-Nummer (als Objekteigenschaft oder Integer) identifiziert werden, erkannt werden, aber nur, wenn es zusammen mit WinWait oder WinWaitClose verwendet wird.

Das ahk_id-Kriterium kann mit anderen Kriterien kombiniert werden, die das angegebene Fenster zusätzlich erfüllen muss. Zum Beispiel gibt WinExist("ahk_id " eineHWND " ahk_class " eineKlasse) eineHWND zurück, wenn das Fenster "erkannt" wurde (gemäß DetectHiddenWindows) und dessen Fensterklasse mit der in eineKlasse enthaltenen Zeichenkette übereinstimmt.

Die ID eines Fensters wird üblicherweise via WinExist oder WinGetID abgerufen. Die ID eines Steuerelements wird üblicherweise via ControlGetHwnd, MouseGetPos oder DllCall abgerufen. Gui- und GuiControl-Objekte haben eine Hwnd-Eigenschaft und können daher direkt in einem FensterTitel-Parameter verwendet werden.

Die folgenden Beispiele arbeiten mit einem Fenster mit einer eindeutigen ID, die in VarMitID gespeichert ist:

; Einen Integer übergeben.
WinActivate Integer(VarMitID)
WinShow A_ScriptHwnd
WinWaitNotActive WinExist("A")

; Ein Objekt mit einer HWND-Eigenschaft übergeben.
WinActivate {Hwnd: VarMitID}
WinWaitClose meinGuiObjekt

; Das ahk_id-Präfix verwenden.
WinActivate "ahk_id " VarMitID

Wenn das Objekt keine HWND-Eigenschaft hat oder der Wert der Eigenschaft kein Integer ist, wird ein PropertyError bzw. TypeError ausgelöst.

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 WinGetPID, Run oder Process-Funktionen 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)

Verwenden Sie ahk_exe ProzessNameOderPfad in FensterTitel, um ein Fenster zu identifizieren, das zu einem Prozess mit dem angegebenen Namen oder Pfad gehört.

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 Funktionen wie WinActivate und WinExist 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 WinExist, WinActive, WinWait[Not]Active, WinWait oder WinWaitClose gefunden wurde. Dieses Fenster kann die Erstellung und Pflege von Skripten erleichtern, da nicht für jede fensterspezifische Funktion 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 Funktionen außer WinWait, WinActivateBottom, GroupAdd, WinGetCount und WinGetList 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 der GUI-Option +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.
}