Aktiviert ein bestimmtes Fenster.
WinActivate FensterTitel, FensterText, AusnahmeTitel, AusnahmeText
Typ: Zeichenkette, Integer oder Objekt
Wenn jeder dieser Parameter leer ist oder weggelassen wird, wird das Zuletzt Gefundene Fenster verwendet. Andernfalls geben Sie für FensterTitel einen Fenstertitel oder andere Kriterien zur Identifizierung des Zielfensters und/oder für FensterText eine Teilzeichenkette aus einem Textelement des Zielfensters an (Textelemente können mit dem internen Tool "Window Spy" in Erfahrung gebracht werden).
AusnahmeTitel und AusnahmeText können verwendet werden, um ein oder mehrere Fenster anhand ihres Titels oder Textes auszuschließen. Ihre Angabe ähnelt der von FensterTitel und FensterText, außer dass AusnahmeTitel keine anderen Kriterien als den Fenstertitel erkennt.
Fenstertitel und -texte sind Groß-/Kleinschreibung-sensitiv. Standardmäßig werden versteckte Fenster nicht erkannt und versteckte Textelemente erkannt, was mit DetectHiddenWindows und DetectHiddenText geändert werden kann. Standardmäßig kann ein Fenstertitel den angegebenen FensterTitel oder AusnahmeTitel an beliebiger Stelle enthalten, um eine Übereinstimmung zu sein, was mit SetTitleMatchMode geändert werden kann.
Es wird ein TargetError ausgelöst, wenn das Fenster nicht gefunden werden konnte.
Wenn ein inaktives Fenster aktiv wird, wird es vom Betriebssystem in den Vordergrund (an den Anfang des Stapels) gesetzt. Dies geschieht nicht, wenn das Fenster bereits aktiv ist.
Wenn das Fenster minimiert und inaktiv ist, wird es vor der Aktivierung automatisch wiederhergestellt. Wenn FensterTitel der Buchstabe "A" ist und die anderen Parameter weggelassen werden, wird das aktive Fenster wiederhergestellt. Das Fenster wird auch wiederhergestellt, wenn es bereits aktiv war.
Es werden sechs Versuche innerhalb von 60 ms unternommen, um das Zielfenster zu aktivieren. Wenn alle sechs Versuche fehlschlagen, sendet WinActivate automatisch {Alt 2}
, um mögliche Einschränkungen durch das System zu umgehen, und unternimmt dann einen siebten Versuch. Daher ist es üblicherweise nicht notwendig, WinWaitActive oder if not WinActive(...)
nach WinActivate auszuführen.
Nach dem ersten fehlgeschlagenen Versuch sendet WinActivate automatisch {Alt up}
. Tests haben gezeigt, dass dies die Zuverlässigkeit aller nachfolgenden Versuche verbessern kann, was die Anzahl der Fälle verringert, in denen der erste Versuch fehlschlägt und die Schaltfläche in der Taskleiste zum Blinken bringt. Zu diesem Zweck wird pro Skript nicht mehr als ein {Alt up}
gesendet. Wenn in diesem oder einem anderen Skript (AutoHotkey v1.1.27+) ein Tastatur-Hook installiert ist, wird {Alt up}
im aktiven Fenster blockiert, wodurch das ohnehin geringe Risiko von Nebeneffekten weiter minimiert wird.
Bei mehreren übereinstimmenden Fenstern wird in der Regel das oberste (meist zuletzt verwendete) Fenster aktiviert. Wenn das Fenster bereits aktiv ist, bleibt es aktiv, anstatt ein anderes übereinstimmendes Fenster darunter zu aktivieren. Wenn jedoch das aktive Fenster mit WinMoveBottom an das Ende des Stapels verschoben wird, kann es vorkommen, dass ein anderes Fenster aktiviert wird, selbst dann, wenn das aktive Fenster eine Übereinstimmung ist.
WinActivateBottom aktiviert das unterste übereinstimmende Fenster (typischerweise das am wenigsten verwendete).
GroupActivate aktiviert das nächste Fenster, das den Kriterien einer Fenstergruppe entspricht.
Wenn das aktive Fenster versteckt ist und DetectHiddenWindows ausgeschaltet ist, gilt das Fenster als nicht gefunden. Stattdessen wird ein sichtbares übereinstimmendes Fenster aktiviert, sofern vorhanden.
Wenn ein Fenster unmittelbar nach der Aktivierung eines anderen Fensters aktiviert wird, kann es je nach Betriebssystem und Einstellungen vorkommen, dass die Taskleistenschaltflächen anfangen zu blinken. Dies kann mit #WinActivateForce verhindert werden.
Bekanntes Problem: Wenn das Skript auf einem Computer oder Server läuft, auf den via Remotedesktop zugegriffen wird, kann WinActivate einen Hänger verursachen, wenn der Remotedesktop-Client minimiert ist. Eine Übergangslösung ist die Verwendung von internen Funktionen, die keine Fensteraktivierung benötigen, wie z.B. ControlSend und ControlClick. Eine andere Übergangslösung ist die Verwendung der folgenden Registry-Einstellung auf dem lokalen Computer des Clients:
; Ändern Sie HKCU in HKLM, um alle Benutzer auf diesem System einzubeziehen. RegWrite "REG_DWORD", "HKCU\Software\Microsoft\Terminal Server Client" , "RemoteDesktop_SuppressWhenMinimized", 2
WinActivateBottom, #WinActivateForce, SetTitleMatchMode, DetectHiddenWindows, Zuletzt Gefundenes Fenster, WinExist, WinActive, WinWaitActive, WinWait, WinWaitClose, WinClose, GroupActivate, Win-Funktionen