Fenstertitel-Parameter & Zuletzt Gefundenes Fenster

Viele Befehle und einige Funktionen 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
ADas aktive Fenster
ahk_classFensterklasse
ahk_idEindeutige ID/HWND
ahk_pidProzess-ID
ahk_exeProzessname/-pfad
ahk_groupFenstergruppe
 Mehrere Kriterien
(Alles leer)Zuletzt Gefundenes Fenster

Übereinstimmungsverhalten

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-Muster sein. Diese Einstellung bestimmt auch, ob ahk_class als exakter Klassenname oder als RegEx-Muster interpretiert werden soll.

Fenstertitel unterscheiden zwischen Groß- und Kleinschreibung, es sei denn, man benutzt den i)-Modifikator in einem RegEx-Suchmuster.

Versteckte Fenster werden nur erkannt, wenn DetectHiddenWindows aktiviert 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.

Aktives Fenster (A)

Wenn Fenstertitel der Buchstabe A ist, und die drei anderen Fensterparameter (Fenstertext, Titelausnahme und Textausnahme) leer oder nicht vorhanden sind, wird das aktive Fenster verwendet.

; Ermittelt die ID/HWND des aktiven Fensters
id := WinExist("A")
MsgBox % id

; Drücken Sie WIN+NACH-OBEN, um das aktive Fenster zu maximieren
#Up::WinMaximize, A

ahk_class Fensterklasse

Eine Fensterklasse ist eine Reihe von Attributen, die das System als Vorlage zum Erstellen eines Fensters verwendet. Das heißt, dass der Klassenname des Fensters kennzeichnet, welche Art von Fenster es ist. Um eine Fensterklasse zu verwenden, fügt man ahk_class ExakterKlassenname ein, wie es auch in Window Spy angezeigt wird. ExakterKlassenname kann per WinGetClass ermittelt werden.

Falls der RegEx-Titelübereinstimmungsmodus aktiv ist, akzeptiert ahk_class einen Regulären Ausdruck.

; Aktiviert ein Konsolenfenster (z. B. cmd.exe)
WinActivate, ahk_class ConsoleWindowClass

ahk_id Eindeutige ID / HWND

Jedes Fenster oder Steuerelement hat eine eindeutige ID, auch bekannt als HWND (Abkürzung für "Handle to Window"). Diese ID kann dazu verwendet werden, das Fenster oder Steuerelement zu identifizieren, auch wenn sich dessen Titel ändert. Die ID eines Fensters wird üblicherweise per WinExist() oder WinGet ermittelt. Die ID eines Steuerelements wird für gewöhnlich per ControlGet Hwnd, MouseGetPos oder DllCall ermittelt. Außerdem funktioniert ahk_id auch bei Steuerelementen, selbst wenn sie versteckt sind; das heißt, dass die Einstellung von DetectHiddenWindows bei Steuerelementen keine Rolle spielt.

WinActivate, ahk_id %VarMitID%

ahk_pid Prozess-ID

Es ist möglich, mit ahk_pid ein Fenster zu bestimmen, das zu einem bestimmten Prozess gehört. Der Prozessidentifikator (PID) wird üblicherweise per WinGet, Run oder Process ermittelt.

WinActivate, ahk_pid %VarMitPID%

ahk_exe Prozessname/-pfad [v1.1.01+]

Es ist möglich, mit ahk_exe ein Fenster zu bestimmen, das zu Prozessen mit bestimmten Namen oder Pfaden gehört.

Während ahk_pid auf einen bestimmten Prozess beschränkt ist, berücksichtigt ahk_exe alle Prozesse, deren Namen oder vollständigen Pfade mit einer bestimmten Zeichenkette übereinstimmen. Falls der RegEx-Titelübereinstimmungsmodus aktiv ist, akzeptiert ahk_exe einen Regulären Ausdruck, der mit dem vollständigen Pfad des Prozesses übereinstimmen muss. Ansonsten akzeptiert ahk_exe einen Namen oder vollständigen Pfad, unabhängig von Groß- und Kleinschreibung; 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.

; Aktiviert ein vorhandenes notepad.exe-Fenster, oder öffnet ein Neues
if WinExist("ahk_exe notepad.exe")
    WinActivate, ahk_exe notepad.exe
else
    Run, notepad.exe
SetTitleMatchMode RegEx
WinActivate ahk_exe i)\\notepad\.exe$  ; Stimmt mit den Namensteil des vollständigen Pfads überein.

ahk_group Fenstergruppe

Es ist möglich, mit ahk_group ein oder mehrere Fenster zu bestimmen, die mit den Regeln aus einer zuvor definierten Fenstergruppe übereinstimmen.

Die Befehle WinMinimize, WinMaximize, WinRestore, WinHide, WinShow, WinClose und WinKill werden mit allen Fenstern aus der Gruppe agieren. Im Gegensatz dazu operieren andere Befehle wie WinActivate und IfWinExist nur mit dem obersten Fenster der Gruppe.

; 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

Mehrere Kriterien

Im Gegensatz zu ahk_group (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).

ahk_id kann mit weiteren 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

Das ist das Fenster, das zuletzt von IfWin[Not]Exist, WinExist(), IfWin[Not]Active, WinActive(), WinWait[Not]Active oder WinWait gefunden wurde. Dadurch können Skripte einfacher erstellt und verwaltet werden, da der Fenstertitel und Fenstertext des Zielfensters nicht für jeden Fensterbefehl angegeben werden muss. Zudem verbessert das die Performance der Skripte, weil das Zielfenster, nachdem es gefunden wurde, nicht nochmal gesucht werden muss.

Das "zuletzt gefundene" Fenster kann von allen Fensterbefehlen, außer WinWait, WinActivateBottom und GroupAdd, verwendet werden. Um es zu nutzen, lässt man alle vier Fensterparameter weg (Fenstertitel, Fenstertext, Titelausnahme und Textausnahme).

Jeder Thread bewahrt seinen eigenen Wert des "zuletzt gefundenen" Fensters auf. Das heißt: Sobald der aktuelle Thread bei Wiederaufnahme des originalen Threads von einem anderen unterbrochen wird, wird er weiterhin seinen originalen Wert des "zuletzt gefundenen" Fensters haben, aber nicht den Wert des unterbrechenden Threads.

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

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

IfWinExist, Unbenannt - Editor
{
    WinActivate  ; Verwendet automatisch das oben gefundene Fenster.
    WinMaximize  ; das gleiche
    Send, Dies ist ein Text.{Enter}
    return
}

IfWinNotExist, Rechner
    return
else
{
    WinActivate  ; Das obige "IfWinNotExist" setzt auch das "zuletzt gefundene" Fenster für uns.
    WinMove, 40, 40  ; Verschiebt es auf eine neue Position.
    return
}