ControlGet

Ruft verschiedene Arten von Informationen über ein Steuerelement ab.

ControlGet, AusgabeVar, Unterbefehl , Wert, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Parameter

AusgabeVar
Name der Ausgabevariable, in der das Ergebnis von Unterbefehl gespeichert werden soll.
Unterbefehl, Wert
Diese Parameter sind voneinander abhängig und können wie unten gezeigt verwendet werden.
Steuerelement

Wenn leer oder weggelassen, wird das oberste Steuerelement des Zielfensters verwendet. Andernfalls geben Sie entweder die ClassNN-Bezeichnung (Klassenname und Instanznummer des Steuerelements) oder den Text des Steuerelements an, die beide mit dem internen Tool "Window Spy" ermittelt werden können. Wenn Text verwendet wird, ist das Übereinstimmungsverhalten abhängig von SetTitleMatchMode.

Um mit dem Fensterhandle (HWND) eines Steuerelements zu arbeiten, lassen Sie den Steuerelement-Parameter leer und übergeben Sie ahk_id %StrlmntHwnd% als FensterTitel-Parameter (funktioniert auch bei versteckten Steuerelementen, selbst wenn DetectHiddenWindows ausgeschaltet ist). Die HWND-Nummer eines Steuerelements kann üblicherweise via ControlGet Hwnd, MouseGetPos oder DllCall() abgerufen werden.

FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

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 muss ein Fenstertitel mit dem angegebenen FensterTitel oder AusnahmeTitel beginnen, um eine Übereinstimmung zu sein, was mit SetTitleMatchMode geändert werden kann.

Unterbefehle

Geben Sie für Unterbefehl Folgendes an:

List

Ruft eine Liste der Einträge in einer ListView, ListBox, ComboBox oder DropDownList ab. Für ListView können zusätzliche Optionen angegeben werden.

ControlGet, AusgabeVar, List , Optionen, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

ListView

Wenn der Optionen-Parameter weggelassen wird oder leer ist, wird der gesamte Text im Steuerelement abgerufen. Jede Zeile außer der letzten endet mit einem Zeilenvorschubzeichen (`n). Innerhalb jeder Zeile endet jedes Feld (Spalte) außer dem letzten mit einem Tabulatorzeichen (`t).

Geben Sie für Optionen beliebig viele der folgenden Wörter an, jeweils getrennt durch ein Leer- oder Tabulatorzeichen:

Option Beschreibung
Selected Ruft nur die markierten (hervorgehobenen) Zeilen ab. Sind keine vorhanden, wird AusgabeVar leer gemacht.
Focused Ruft nur die fokussierte Zeile ab. Sind keine vorhanden, wird AusgabeVar leer gemacht.
ColN Ruft nur die N-te Spalte (Feld) ab. Ersetzen Sie N mit einer beliebigen Zahl. Zum Beispiel ruft Col4 die vierte Spalte ab.
Count Ruft eine einzelne Zahl ab, die die Gesamtanzahl der Zeilen im Steuerelement repräsentiert.
Count Selected Ruft die Anzahl der markierten (hervorgehobenen) Zeilen ab.
Count Focused Ruft die Zeilennummer (Position) der fokussierten Zeile ab (andernfalls 0).
Count Col Ruft die Anzahl der Spalten im Steuerelement ab (oder -1, wenn die Anzahl nicht ermittelt werden kann).

Hinweis: Einige Anwendungen behandeln die Daten ihrer ListView vertraulich, so dass ihr Text nicht abgerufen werden kann. In solchen Fällen wird ErrorLevel normalerweise auf 0 gesetzt (was auf Erfolg hinweist), aber alle abgerufenen Felder sind leer. Beachten Sie auch, dass #MaxMem keinen Einfluss darauf hat, wie viel Text aus einer ListView abgerufen werden kann.

Bei Erfolg wird ErrorLevel auf 0 gesetzt. Bei Misserfolg wird ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht. Misserfolg tritt auf, wenn: 1) das Zielfenster oder Zielsteuerelement nicht existiert; 2) das Zielsteuerelement nicht vom Typ SysListView32 ist; 3) der Prozess, der die ListView besitzt, nicht geöffnet werden konnte, z.B. weil Benutzerrechte fehlen oder der Prozess gesperrt ist; 4) die ColN-Option eine nicht-existierende Spalte angibt.

Das folgende Beispiel zeigt, wie man mit einer parsenden Schleife einzelne Zeilen und Felder aus einer ListView extrahieren kann:

ControlGet, AusgewählteZeilen, List, Selected, SysListView321, FensterTitel
Loop, Parse, AusgewählteZeilen, `n  ; Zeilen sind mit Zeilenvorschüben (`n) voneinander getrennt.
{
    ZeileNummer := A_Index
    Loop, Parse, A_LoopField, %A_Tab%  ; Die Felder (Spalten) jeder Zeile sind mit Tabulatorzeichen (A_Tab) getrennt.
        MsgBox Zeile Nr. %ZeileNummer% Spalte Nr. %A_Index% enthält %A_LoopField%.
}

Es ist auch möglich, mit SendMessage die Spalten einer ListView kleiner/größer zu machen. Zum Beispiel:

SendMessage, 0x101E, 0, 80, SysListView321, FensterTitel  ; 0x101E ist LVM_SETCOLUMNWIDTH.

Im obigen Beispiel steht 0 für die erste Spalte (1 für die zweite, 2 für die dritte und so weiter). 80 ist die neue Breite. Ersetzen Sie 80 mit -1, um die Spaltenbreite automatisch an den Inhalt anzupassen. Ersetzen Sie 80 mit -2, um dasselbe zu tun, aber unter Berücksichtigung der Überschriftsbreite.

ListBox, ComboBox, DropDownList

Es kann nur der gesamte Text aus dem Steuerelement abgerufen werden (d.h. die oben genannten ListView-Optionen wie Count und Selected werden nicht unterstützt).

Jeder Listeneintrag außer dem letzten endet mit einem Zeilenvorschubzeichen (`n). Das folgende Beispiel zeigt, wie man mit einer parsenden Schleife die Listeneinträge einzeln durchlaufen kann:

ControlGet, Einträge, List,, ComboBox1, FensterTitel
Loop, Parse, Einträge, `n
    MsgBox Eintragsnummer %A_Index% ist %A_LoopField%.

Checked

Ruft 1 ab, wenn die CheckBox/Radio eingeschaltet ist, oder 0, wenn nicht.

ControlGet, AusgabeVar, Checked ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Enabled

Ruft 1 ab, wenn die Interaktion mit Steuerelement erlaubt ist, oder 0, wenn sie verboten ist.

ControlGet, AusgabeVar, Enabled ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Visible

Ruft 1 ab, wenn Steuerelement sichtbar ist, oder 0, wenn es versteckt ist.

ControlGet, AusgabeVar, Visible ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Tab

Ruft die Nummer des aktuell ausgewählten Tabs eines SysTabControl32-Steuerelements ab.

ControlGet, AusgabeVar, Tab ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Der erste Tab ist 1, der zweite 2 und so weiter. Um stattdessen herauszufinden, wie viele Tabs (Seiten) in einem Tab-Steuerelement vorhanden sind, gehen Sie wie folgt vor:

SendMessage, 0x1304,,, SysTabControl321, FensterTitel  ; 0x1304 ist TCM_GETITEMCOUNT.
TabsAnzahl := ErrorLevel

FindString

Ruft die Nummer eines ListBox- oder ComboBox-Eintrags ab, der exakt mit Zeichenkette übereinstimmt.

ControlGet, AusgabeVar, FindString, Zeichenkette , Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Der erste Listeneintrag im Steuerelement ist 1, der zweite 2 und so weiter. Wurde kein Listeneintrag gefunden, wird AusgabeVar leer gemacht und ErrorLevel auf 1 gesetzt.

Choice

Ruft den Namen des aktuell ausgewählten ListBox- oder ComboBox-Eintrags ab.

ControlGet, AusgabeVar, Choice ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Um stattdessen die Positionsnummer des ausgewählten Listeneintrags abzurufen, gehen Sie wie folgt vor (verwenden Sie aber nur eine der ersten zwei Zeilen):

SendMessage, 0x0188, 0, 0, ListBox1, FensterTitel  ; 0x0188 ist LB_GETCURSEL (für eine ListBox).
SendMessage, 0x0147, 0, 0, ComboBox1, FensterTitel  ; 0x0147 ist CB_GETCURSEL (für eine DropDownList oder ComboBox).
AuswahlPos := ErrorLevel<<32>>32  ; Konvertiert UInt in Int, um -1 im Falle eines nicht ausgewählten Eintrags zu haben.
AuswahlPos += 1  ; Konvertiert 0-basiert in 1-basiert, d.h. der erste Eintrag ist 1, nicht 0.

LineCount

Ruft die Anzahl der Zeilen in einem Edit-Steuerelement ab.

ControlGet, AusgabeVar, LineCount ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Alle Edit-Steuerelemente, auch leere, haben mindestens eine Zeile.

CurrentLine

Ruft die Nummer der Zeile in einem Edit-Steuerelement ab, auf der sich der Textcursor (Einfügemarke) aktuell befindet.

ControlGet, AusgabeVar, CurrentLine ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Die erste Zeile ist 1. Wenn Text im Steuerelement markiert ist, wird AusgabeVar auf die Zeilennummer gesetzt, wo die Markierung beginnt.

CurrentCol

Ruft die Nummer der Spalte in einem Edit-Steuerelement ab, auf der sich der Textcursor (Einfügemarke) aktuell befindet.

ControlGet, AusgabeVar, CurrentCol ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Die erste Spalte ist 1. Wenn Text im Steuerelement markiert ist, wird AusgabeVar auf die Spaltennummer gesetzt, wo die Markierung beginnt.

Line

Ruft den Text auf Zeile N in einem Edit-Steuerelement ab.

ControlGet, AusgabeVar, Line, N , Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Die erste Zeile ist 1. Je nach Typ des Steuerelements kann AusgabeVar entweder mit einem Wagenrücklauf (`r) oder einem Wagenrücklauf-Zeilenvorschub-Paar (`r`n) enden. Wenn die angegebene Zeilennummer leer ist oder nicht existiert, wird ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht.

Selected

Ruft den markierten Text in einem Edit-Steuerelement ab.

ControlGet, AusgabeVar, Selected ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Wenn kein Text markiert ist, wird AusgabeVar leer gemacht und ErrorLevel auf 0 gesetzt (was auf Erfolg hinweist). Es kann vorkommen, dass bestimmte Typen von Steuerelementen wie RichEdit20A in manchen Fällen nicht den korrekten Text erzeugen (z.B. Metapad).

Style

Ruft den Style des Steuerelements als 8-stellige Hexadezimalzahl ab.

ControlGet, AusgabeVar, Style ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Einige Styles finden Sie unter Fenster- und Steuerelement-Styles.

ExStyle

Ruft den erweiterten Style des Steuerelements als 8-stellige Hexadezimalzahl ab.

ControlGet, AusgabeVar, ExStyle ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Einige Styles finden Sie unter Fenster- und Steuerelement-Styles.

Hwnd [v1.0.43.06+]

Ruft das Fensterhandle (HWND) des Steuerelements ab.

ControlGet, AusgabeVar, Hwnd ,, Steuerelement, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Zum Beispiel: ControlGet, AusgabeVar, Hwnd,, Edit1, FensterTitel. Die HWND-Nummer (eindeutige ID) eines Steuerelements wird oft in Verbindung mit PostMessage, SendMessage und DllCall() verwendet. Die HWND-Nummer eines Steuerelements kann auch mit MouseGetPos abgerufen werden. So eine HWND-Nummer kann direkt als ahk_id-Fenstertitel verwendet werden (das auch mit versteckten Steuerelementen funktioniert, selbst wenn DetectHiddenWindows ausgeschaltet ist).

Fehlerbehandlung

[v1.1.04+]: Dieser Befehl ist in der Lage, bei Misserfolg eine Ausnahme auszulösen. Weitere Informationen finden Sie unter Laufzeitfehler.

Bei Erfolg wird ErrorLevel auf 0 gesetzt. Bei Misserfolg (z.B. wenn das Fenster oder Steuerelement nicht existiert) wird ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht.

Bemerkungen

Im Gegensatz zu Befehlen, die ein Steuerelement ändern, erfolgt nach ControlGet keine automatische Verzögerung, d.h. SetControlDelay hat keinen Einfluss auf ControlGet.

Mit MouseGetPos kann die ClassNN-Bezeichnung oder HWND-Nummer (eindeutige ID) des Steuerelements unter dem Mauszeiger abgerufen werden. Mit WinGet ControlList kann eine Liste von Steuerelementen in einem Fenster abgerufen werden.

Control, GuiControlGet, ControlMove, ControlGetText, ControlSetText, ControlGetPos, ControlClick, ControlFocus, ControlSend, WinGet

Beispiele

Ruft die erste Zeile des ersten Edit-Steuerelements ab.

ControlGet, AusgabeVar, Line, 1, Edit1, Beliebiger Fenstertitel

Ruft den aktuell aktiven Tab des ersten Tab-Steuerelements ab.

ControlGet, WelcherTab, Tab,, SysTabControl321, Beliebiger Fenstertitel
if ErrorLevel
    MsgBox Es wurde ein Problem festgestellt.
else
    MsgBox Tab Nr. %WelcherTab% ist aktiv.