Verschiedene Befehle, Funktionen und Kontrollanweisungen haben einen FensterTitel-Parameter, mit dem bestimmt werden kann, welche Fenster einbezogen werden sollen. Dieser Parameter kann der Titel des Fensters (teilweise oder vollständig) sein, und/oder sonstige Kriterien, die auf dieser Seite beschrieben werden.
Kurzübersicht:Titel | Übereinstimmungsverhalten |
A | Das aktive Fenster |
ahk_class | Fensterklasse |
ahk_id | Eindeutige ID/HWND |
ahk_pid | Prozess-ID |
ahk_exe | Prozessname/-pfad |
ahk_group | Fenstergruppe |
Mehrere Kriterien | |
(Alles leer) | Zuletzt Gefundenes Fenster |
SetTitleMatchMode kontrolliert, wie der angegebene Titel (teilweise oder vollständig) mit den Titeln anderer Fenster verglichen werden soll. 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 das ahk_class- und ahk_exe-Kriterium als RegEx-Suchmuster interpretiert werden soll.
Fenstertitel sind Groß-/Kleinschreibung-sensitiv, es sei denn, man benutzt den i)-Modifikator in einem RegEx-Suchmuster.
Versteckte Fenster werden nur erkannt, wenn DetectHiddenWindows eingeschaltet ist; mit Ausnahme von WinShow, das versteckte Fenster immer erkennen kann.
Falls mehrere Fenster mit FensterTitel und sonstigen Kriterien übereinstimmen, wird das oberste übereinstimmende Fenster verwendet. Wenn das aktive Fenster mit den Kriterien übereinstimmt, wird es üblicherweise bevorzugt, weil sich dieses Fenster für gewöhnlich über allen anderen Fenstern befindet. Gibt es neben dem aktiven Fenster auch eine Übereinstimmung mit einem Immer-im-Vordergrund-Fenster, wird dieses stattdessen verwendet.
Verwenden Sie den Buchstaben A
für FensterTitel und lassen Sie die anderen drei Fensterparameter (FensterText, IgnoriereTitel und IgnoriereText) weg, um mit dem aktiven Fenster zu agieren.
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
Geben Sie eines oder mehrere der folgenden ahk_-Kriterien an (optional zusätzlich zum Titel eines Fensters). Ein ahk_-Kriterium besteht immer aus einem ahk_-Schlüsselwort und seinem Kriteriumwert, beide getrennt mit null oder mehr Leer- oder Tabulatorzeichen. Zum Beispiel repräsentiert ahk_class Notepad
ein Texteditor-Fenster.
Das ahk_-Schlüsselwort und sein Kriteriumwert müssen nicht zwingend mit Leer- oder Tabulatorzeichen voneinander getrennt sein. Dies ist vorwiegend nützlich, wenn ahk_-Kriterien als Ausdrücke in Kombination mit Variablen angegeben werden. Sie könnten z. B. "ahk_pid" PID
anstelle von "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.
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 zum Erstellen eines Fensters verwendet. Mit anderen Worten kennzeichnet der Klassenname des Fensters, welche Art von Fenster es ist. Eine Fensterklasse kann via Window Spy aufgedeckt oder über WinGetClass abgerufen werden. Falls 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 der RegEx-Titelübereinstimmungsmodus vorher eingeschaltet werden muss, damit es funktioniert):
WinActivate, ahk_class i)^ConsoleWindowClass$
Verwenden Sie ahk_id HWND
in FensterTitel, um ein Fenster oder ein Steuerelement anhand seiner eindeutigen ID zu identifizieren.
Jedes Fenster oder Steuerelement hat eine eindeutige ID, auch bekannt als HWND (Abkürzung für "Handle to Window"). Diese ID kann zur Identifizierung des Fensters oder Steuerelements verwendet werden, selbst wenn sich dessen Titel ä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 bei Steuerelementen, die versteckt sind; das heißt, dass die Einstellung von DetectHiddenWindows bei Steuerelementen keine Rolle spielt.
Das folgende Beispiel aktiviert ein Fenster anhand einer eindeutigen ID, die in VarMitID gespeichert ist:
WinActivate, ahk_id %VarMitID%
Verwenden Sie ahk_pid PID
in FensterTitel, um ein Fenster zu identifizieren, das zu einem bestimmten Prozess gehört. Der Prozessidentifikator (PID) wird üblicherweise per WinGet, Run oder Process ermittelt. Die ID des Prozesses eines Fensters kann via Window Spy aufgedeckt werden.
Das folgende Beispiel aktiviert ein Fenster anhand einer Prozess-ID, die in VarMitPID gespeichert ist:
WinActivate, ahk_pid %VarMitPID%
Verwenden Sie ahk_exe ProzessNameOderPfad
in FensterTitel, um ein Fenster zu identifizieren, das zu einem beliebigen 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 Namen oder vollständigen Pfade mit einer bestimmten Zeichenkette übereinstimmen. Falls der RegEx-Titelübereinstimmungsmodus aktiv ist, akzeptiert ProzessNameOderPfad einen regulären Ausdruck, der mit dem vollständigen Pfad des Prozesses übereinstimmen muss. Ansonsten akzeptiert es einen nicht-Groß-/Kleinschreibung-sensitiven Namen oder vollständigen Pfad; zum Beispiel bezieht sich ahk_exe notepad.exe
auf ahk_exe C:\Windows\Notepad.exe
, ahk_exe C:\Windows\System32\Notepad.exe
und andere Variationen. Der Name des Prozesses eines Fensters kann via Window Spy aufgedeckt werden.
Das folgende Beispiel aktiviert ein Texteditor-Fenster anhand seines Prozessnamens:
WinActivate, ahk_exe notepad.exe
Das folgende Beispiel macht dasselbe wie oben, verwendet aber einen regulären Ausdruck (beachten Sie, dass der RegEx-Titelübereinstimmungsmodus vorher eingeschaltet werden muss, damit es funktioniert):
WinActivate, ahk_exe i)\\notepad\.exe$ ; Stimmt mit den Namensteil des vollständigen Pfads überein.
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 werden mit allen Fenstern der Gruppe agieren. Andere fensterspezifische Befehle, Funktionen und Kontrollanweisungen wie WinActivate, WinExist() und IfWinExist agieren hingegen nur mit dem obersten Fenster einer Gruppe.
Das folgende Beispiel aktiviert jedes Fenster, das den Kriterien einer Fenstergruppe entspricht:
; Definiert die Gruppe: Windows-Explorer-Fenster GroupAdd, Explorer, ahk_class ExploreWClass ; Unbenutzt in Vista und höher GroupAdd, Explorer, ahk_class CabinetWClass ; Aktiviert jedes Fenster, das mit den obigen Kriterien übereinstimmt WinActivate, ahk_group Explorer
Im Gegensatz zum ahk_group-Kriterium (das die Suche erweitert) kann die Suche durch Angabe von mehr als ein Kriterium innerhalb des FensterTitel-Parameters 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 ; Aktiviert das zuvor gefundene Fenster.
Beim Verwenden dieser Methode sollte der Text des Titels (falls gewünscht) zuerst aufgelistet werden, gefolgt von einem oder mehreren zusätzlichen Kriterien. Die Kriterien sollten jeweils mit genau einem Leer- oder Tabulatorzeichen getrennt werden (jedes weitere Leer- oder Tabulatorzeichen wird als direkt geschriebener Teil des vorherigen Kriteriums angesehen).
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 dem Texteditor.
Das zuletzt gefundene Fenster ist 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 es verhindert, für jeden Befehl, jede interne Funktion oder jede Kontrollanweisung, der/die mit Fenstern agiert, den FensterTitel und FensterText des Zielfensters angeben zu müssen. Zudem verbessert das die Leistung der Skripte, weil das Zielfenster, nachdem es gefunden wurde, nicht nochmal gesucht werden muss.
Das zuletzt gefundene Fenster kann von allen fensterspezifischen Befehlen, internen Funktionen und Kontrollanweisungen, außer WinWait, WinActivateBottom, GroupAdd, WinGet Count und WinGet List, verwendet werden. Um es zu nutzen, lassen Sie einfach alle vier Fensterparameter weg (FensterTitel, FensterText, IgnoriereTitel und IgnoriereText).
Jeder Thread behält seinen eigenen Wert des zuletzt gefundenen Fensters. Soll heißen: 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 bei ausgeschaltetem DetectHiddenWindows verwendet werden. Das wird oft in Verbindung mit Gui +LastFound benutzt.
Das folgende Beispiel öffnet den Texteditor, wartet, bis er existiert, und aktiviert ihn:
Run Notepad WinWait Unbenannt - Editor WinActivate ; Verwendet das von WinWait gefundene Fenster.
Das folgende Beispiel aktiviert und maximiert das von WinExist() gefundene Texteditor-Fenster:
if WinExist("Unbenannt - Editor") { WinActivate ; Verwendet das von WinExist gefundene Fenster. WinMaximize ; Das gleiche 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 ; Das gleiche wie oben. }