StrlmntID-Parameter (Steuerelementidentifikatoren)

Einige Befehle haben einen StrlmntID-Parameter, der verwendet wird, um das Steuerelement in einem Fenster zu identifizieren, mit dem gearbeitet werden soll. Dieser Parameter kann der Text des Steuerelements oder ein anderer auf dieser Seite beschriebener Identifikator sein.

Inhaltsverzeichnis

Steuerelementidentifikatoren

Die folgenden Identifikatoren sind nach ihrer Rangfolge sortiert. Dieses Detail ist nur in seltenen Fällen von Bedeutung, nämlich dann, wenn es zu Mehrdeutigkeiten kommt. Wenn ein Fenster z.B. zwei Eingabefelder hat, das erste mit dem Text "Edit2" und das zweite mit ClassNN "Edit2", und Control, Hide,, Edit2 verwendet wird, wird das zweite Eingabefeld versteckt, weil ClassNN höherrangig ist.

HWND

Ein HWND (kurz für "Handle to Window") identifiziert ein Steuerelement eindeutig, solange es existiert. Um damit zu arbeiten, lassen Sie den StrlmntID-Parameter leer und geben Sie ahk_id %StrlmntHwnd% im FensterTitel-Parameter an (dies funktioniert auch mit versteckten Steuerelementen, selbst wenn DetectHiddenWindows ausgeschaltet ist). [v1.1.04+]: Bei GuiControl und GuiControlGet kann das HWND direkt in StrlmntID angegeben werden.

Das HWND eines Steuerelements kann via DllCall(), in [v1.0.43.06+] via ControlGet Hwnd, WinGet ControlListHwnd und MouseGetPos, in [v1.0.46.01+] via Hwnd-Option (Gui Add) und in [v1.0.46.16+] via GuiControlGet Hwnd abgerufen werden.

Ein HWND ist besonders nützlich, wenn Meldungen direkt an ein Steuerelement via PostMessage oder SendMessage gesendet werden, oder wenn native APIs mit DllCall() aufgerufen werden. Es ist auch hilfreich, wenn Steuerelemente dynamisch erstellt oder neu angeordnet werden, da das HWND während der Lebensdauer des Steuerelements konstant bleibt.

Zugeordnete Variable

Ein GUI-Steuerelement kann anhand des Namens seiner zugeordneten Variable identifiziert werden. Dies gilt für Steuerelemente, die mit Gui Add erstellt wurden, wenn die V-Option verwendet wird (z.B. vMeinEdit). Der Variablenname kann anschließend als Identifikator für GuiControl und GuiControlGet verwendet werden, um das Steuerelement eindeutig zu identifizieren.

Die Verwendung einer zugeordneten Variable ist oft der einfachste Weg, um ein GUI-Steuerelement zu identifizieren, selbst für Steuerelemente, die nicht eingabefähig sind (wie z.B. Text oder GroupBox). Auch wenn die Variable in solchen Fällen nicht zum Speichern von Eingaben dient, kann sie immerhin als stabiler und lesbarer Identifikator verwendet werden.

ClassNN

Die ClassNN eines Steuerelements ist der Name seiner Fensterklasse, gefolgt von seiner Sequenznummer innerhalb des Top-Level-Fensters, das dieses Steuerelement enthält. Die Sequenznummer spiegelt die Position des Steuerelements unter den Steuerelementen derselben Klasse wider, und zwar in der Reihenfolge, in der sie erstellt wurden. Zum Beispiel ist Edit1 das erste Eingabefeld in einem Fenster und Button12 die zwölfte Schaltfläche.

Einige Klassennamen enthalten Ziffern, die nicht zur Sequenznummer des Steuerelements gehören. Zum Beispiel ist SysListView321 das erste ListView-Steuerelement in einem Fenster, nicht das dreihunderteinundzwanzigste. Um den Klassennamen ohne Sequenznummer abzurufen, übergeben Sie das HWND des Steuerelements an WinGetClass.

Die ClassNN eines Steuerelements kann via Window Spy ermittelt werden. Einige Befehle wie ControlGetFocus, GuiControlGet Focus, WinGet ControlList und MouseGetPos rufen eine ClassNN ab.

Die Sequenznummer ist kein persistenter Identifikator. Die Nummer kann sich ändern, wenn die Anwendung Steuerelemente neu erstellt, ihre Reihenfolge ändert oder dynamische oder virtualisierte UI-Elemente verwendet. Es ist möglich, dass einige moderne Frameworks (z.B. WPF oder Electron) gar keine traditionellen Win32-Klassennamen preisgeben oder bereits etablierte Klassennamen für mehrere nicht verwandte Steuerelemente verwenden.

ClassNN ist oft praktisch, wenn die Steuerelemente keinen eindeutigen Text haben und die Reihenfolge der Steuerelemente stabil bleibt. Wenn die Stabilität nicht garantiert werden kann, sollten Sie ein HWND oder einen anderen Identifikator verwenden.

Text

Der Text eines Steuerelements kann als Identifikator verwendet werden, z.B. OK für eine OK-Schaltfläche. Das Übereinstimmungsverhalten ist abhängig von SetTitleMatchMode. Verwenden Sie Text, wenn er eindeutig und stabil ist; viele Steuerelemente aktualisieren ihn dynamisch oder geben keinen verwertbaren Text preis.

Der Text eines Steuerelements kann via Window Spy ermittelt werden. Einige Befehle wie ControlGetText und GuiControlGet rufen einen solchen Text ab.

Weggelassen

Bei Nicht-GUI-Befehlen bewirkt das Weglassen des StrlmntID-Parameters, dass sie mit dem obersten Steuerelement des Zielfensters arbeiten. Allerdings weisen einige von ihnen ein Sonderverhalten auf, wenn dieser Parameter weggelassen wird:

Bei GuiControlGet bewirkt das Weglassen des StrlmntID-Parameters, dass es sich so verhält, als wäre der Name der zugeordneten Variable des Steuerelements (falls vorhanden) angegeben worden.

Bemerkungen

Die folgenden Befehle haben einen StrlmntID-Parameter: Control, ControlClick, ControlFocus, ControlGet, ControlGetPos, ControlGetText, ControlMove, ControlSend, ControlSetText, GuiControl, GuiControlGet, PostMessage, SendMessage. Die meisten dieser Befehle haben Beispiele auf der entsprechenden Seite, die die Verwendung von Steuerelementidentifikatoren demonstrieren.

ClassNN und der Text von Steuerelementen können sich ändern, wenn Anwendungen Steuerelemente neu erstellen, ihre Reihenfolge ändern, dynamische oder virtualisierte Schnittstellen verwenden oder auf Frameworks zurückgreifen, die keine stabilen Win32-Klassennamen oder Texte bereitstellen. Wenn Identifikatoren unzuverlässig sind, verwenden Sie lieber ein HWND, das für dessen Lebensdauer stabil ist, oder kombinieren Sie mehrere Kriterien. Allgemein gilt: Verwenden Sie den Text des Steuerelements, wenn er eindeutig und stabil ist, verwenden Sie ClassNN, wenn die Reihenfolge der Steuerelemente konsistent und die Lesbarkeit erwünscht ist, und verwenden Sie ein HWND, wenn maximale Stabilität erforderlich ist. Vermeiden Sie hartcodierte Identifikatoren über Anwendungsversionen hinweg, es sei denn, Sie kontrollieren die Zielanwendung.

FensterTitel-Parameter & Zuletzt Gefundenes Fenster