Liefert das Control des Zielfensters, das den Eingabefokus hat.
ControlGetFocus, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]
| OutputVar |
Der Name der Variablen, in der der Bezeichner des Controls gespeichert wird, der sich aus dem Klassennamen und der Folgenummer innerhalb des Fensters zusammensetzt (ClassNN), z.B. Button12. |
| WinTitle |
Der vollständige Titel oder ein Teil des Titels des Zielfensters (das Suchergebnis wird von SetTitleMatchMode beeinflusst). Wenn dieser und die nächsten 3 Parameter leer gelassen werden, wird das LastFoundWindow (zuletzt gefundene Fenster) verwendet. Wenn hier der Buchstabe A angegeben wird und die nächsten 3 Parameter leer gelassen werden, wird das momentan aktive Fenster verwendet. Für eine Fensterklasse wird ahk_class ExakterKlassenName (wie vom "Window Spy" angezeigt) angegeben, für eine Prozess ID (PID) ahk_pid %VarMitInhaltPID%, für eine Fenstergruppe ahk_group GroupName und für die eindeutige ID eines Fensters ahk_id %VarMitInhaltID%. Die Suche kann durch Angabe mehrerer Kriterien eingeschränkt werden. Beispiel: My File.txt ahk_class Notepad |
| WinText |
Wenn angegeben, muss dieser Parameter den Inhalt oder einen Teil des Inhalts eines einzelnen Textelementes des Zielfensters enthalten, wie er z.B. vom mitgelieferten "Window Spy" angezeigt wird. Verborgene Textelemente werden nur gefunden, wenn DetectHiddenText vorher auf ON gesetzt wurde. |
| ExcludeTitle |
Fenster, deren Titel diesen Wert enthalten, werden bei der Suche übergangen. |
| ExcludeText |
Fenster, deren Text diesen Wert enthält, werden bei der Suche übergangen. |
ErrorLevel wird auf 0 gesetzt, wenn das Control mit dem Eingabefokus erfolgreich ermittelt wurde, anderenfalls (z.B. wenn das Zielfenster nicht existiert oder keines seiner Controls den Fokus hat) auf 1.
Das Control, das mit dieser Anweisung ermittelt wird, ist dasjenige, das den Eingabefokus hat, d.h. an das ggf. Tastatureingaben des Benutzer weitergeleitet werden.
Das Zielfenster muss aktiv sein, damit eines seiner Controls den Fokus haben kann. Wenn das Fenster nicht aktiv ist, wird OutputVar geleert.
Wenn ControlGetFocus wiederholt mit hoher Frequenz (d.h. alle 500 ms oder öfter) ausgeführt wird, kann dadurch verhindert werden, dass der Benutzer Doppelklicks eingeben kann. Eine Abhilfe bietet der Aufruf der Betriebssystemfunktion GetGUIThreadInfo() mit DllCall. Beispiel:
; Dieses Skript ermittelt die ahk_id (HWND) des Controls mit dem Eingabefocus im aktiven Fenster. ; Dieses Skript benötigt Windows 98+ oder NT 4.0 SP3+. GuiThreadInfoSize = 48 VarSetCapacity(GuiThreadInfo, GuiThreadInfoSize) NumPut(GuiThreadInfoSize, GuiThreadInfo, 0)
if not DllCall("GetGUIThreadInfo", uint, 0, str, GuiThreadInfo)
{
MsgBox GetGUIThreadInfo() indicated a failure.
return
}
FocusedHWND := NumGet(GuiThreadInfo, 12) ; Liefert das "hwndFocus"-Feld der Struktur. MsgBox % "The focused control's ahk_id (HWND) is " . FocusedHWND ; Diese ID kann in allen Control-Anweisungen verwendet werden. ; Beispiel: ControlGetText, OutputVar,, ahk_id %FocusedHWND%
Bei Fenstertiteln und -texten muss die Groß/Kleinschreibung beachtet werden. Verborgene Fenster werden nur gefunden, wenn DetectHiddenWindows vorher auf ON gesetzt wurde.
ControlFocus, ControlMove, ControlClick, ControlGetText, ControlSetText, ControlSend
ControlGetFocus, OutputVar, Untitled - Notepad
if ErrorLevel
MsgBox, Das Zielfenster existiert nicht oder keines seiner Controls hat den Eingabefokus.
else
MsgBox, Control mit Fokus = %OutputVar%