ControlSend / ControlSendRaw

Sendet simulierte Tastendrücke an ein Fenster oder Steuerelement.

ControlSend, Steuerelement, Tasten , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText
ControlSendRaw, Steuerelement, Tasten , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Parameter

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. Wenn dieser Parameter ahk_parent ist, werden die Tastendrücke direkt an das Zielfenster gesendet, anstatt an eines der darin enthaltenen Steuerelemente (ein Beispiel finden Sie unter Winamp automatisieren).

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.

Tasten

Eine Reihe von Tasten, die gesendet werden sollen (weitere Informationen finden Sie auf der Send-Seite). Um ein direkt geschriebenes Komma zu senden, versehen Sie es mit einem Escapezeichen (`,). Die Geschwindigkeit, mit der die Zeichen gesendet werden, wird durch SetKeyDelay beeinflusst.

Im Gegensatz zum Send-Befehl kann ControlSend keine Mausklicks senden. Verwenden Sie stattdessen ControlClick.

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.

Fehlerbehandlung

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

ErrorLevel wird bei Misserfolg auf 1 und bei Erfolg auf 0 gesetzt.

Bemerkungen

ControlSendRaw sendet die in Tasten angegebenen Tastendrücke ohne Übersetzung von z.B. {Enter} in Enter, ^c in Strg+C und so weiter. Weitere Informationen finden Sie unter Raw-Modus. {Raw} oder {Text} kann auch bei ControlSend verwendet werden. [v1.1.27+]: Der Text-Modus kann für das Senden von Text zuverlässiger sein.

Wenn der Steuerelement-Parameter weggelassen wird, versucht dieser Befehl, die Tastendrücke entweder an das oberste Steuerelement zu senden (welches oft das richtige ist) oder, wenn keine Steuerelemente vorhanden sind, an das Fenster selbst. Das ist nützlich, wenn das Fenster keine Steuerelemente zu haben scheint, oder wenn es egal ist, an welches Steuerelement die Tastendrücke gesendet werden.

Standardmäßig werden Modifikatoren (Strg, Alt, Umschalt und Win) so gesendet, wie sie normalerweise mit dem Send-Befehl gesendet werden würden. Dadurch können Konsolenfenster wie die Windows-Eingabeaufforderung Großbuchstaben, Steuerzeichen usw. korrekt erkennen. Dies könnte auch die Zuverlässigkeit in anderen Bereichen verbessern.

In einigen Fällen können diese Modifikatorereignisse jedoch das aktive Fenster stören, insbesondere dann, wenn der Benutzer während eines ControlSends aktiv schreibt oder wenn Alt gesendet wird (da Alt die Menüleiste des aktiven Fensters aktiviert). Dies lässt sich vermeiden, indem man explizit Up- und Down-Ereignisse des Modifikators sendet. Zum Beispiel:

ControlSend, Edit1, {Alt down}f{Alt up}, Unbenannt - Editor

Die obige Methode erlaubt auch das Senden von Modifikatoren (Strg, Alt, Umschalt und Win), während der PC gesperrt ist (durch die Anmeldeaufforderung geschützt ist).

BlockInput sollte vermieden werden, wenn ControlSend auf ein Konsolenfenster wie die Windows-Eingabeaufforderung angewendet wird. BlockInput kann dazu führen, dass die Großschreibung und Modifikatortasten wie Strg nicht richtig funktionieren.

Die Geschwindigkeit, mit der die Tasten gesendet werden, wird durch SetKeyDelay beeinflusst. Wenn die Tastendrücke unzuverlässig an das Zielfenster gesendet werden, versuchen Sie, die Druckdauer über den zweiten Parameter von SetKeyDelay zu erhöhen. Zum Beispiel:

SetKeyDelay, 10, 10
SetKeyDelay, 0, 10
SetKeyDelay, -1, 0

Wenn es sich bei dem Zielsteuerelement um ein Edit-Steuerelement (oder ähnliches) handelt, sind die folgenden Aktionen in der Regel zuverlässiger und schneller als ControlSend:

Control, EditPaste, Dieser Text wird an der Position des Textcursors eingefügt., SteuerelementName, FensterTitel
ControlSetText, SteuerelementName, Dieser Text wird den bisherigen Text vollständig ersetzen., FensterTitel

ControlSend ist normalerweise nicht in der Lage, die Menüleiste eines Fensters zu manipulieren. Um das zu umgehen, verwenden Sie WinMenuSelectItem. Sollte dies aufgrund der Art der Menüleiste nicht funktionieren, können Sie stattdessen versuchen, die Meldung des gewünschten Menüpunkts mithilfe des SendMessage-Tutorials herauszufinden.

SetKeyDelay, Escapesequenzen (z.B. `%), Control, ControlGet, ControlGetText, ControlMove, ControlGetPos, ControlClick, ControlSetText, ControlFocus, Send, Winamp automatisieren

Beispiele

Öffnet Notepad im minimierten Zustand und sendet ihm etwas Text. Dieses Beispiel kann unter Windows 11 oder höher fehlschlagen, da es die klassische Version von Notepad erfordert.

Run, Notepad,, Min, PID  ; Notepad minimiert starten.
WinWait, ahk_pid %PID%  ; Warten, bis es erscheint.
; Den Text an das inaktive Notepad-Eingabefeld senden.
; Dritten Parameter weglassen, um das zuletzt gefundene Fenster zu verwenden.
ControlSend, Edit1, Dies ist eine Textzeile in Notepad.{Enter}
ControlSendRaw, Edit1, Beachten Sie`, dass {Enter} nicht als Enter-Tastendruck gesendet wurde.

Msgbox Drücken Sie OK, um das Fenster zu aktivieren und das Ergebnis zu sehen.
WinActivate, ahk_pid %PID%  ; Das Ergebnis anzeigen.

Öffnet die Windows-Eingabeaufforderung und sendet ihr etwas Text. Dieses Beispiel kann unter Windows 11 oder höher fehlschlagen, da es die klassische Version der Eingabeaufforderung erfordert.

SetTitleMatchMode, 2
Run, %A_ComSpec%,,, PID  ; Eingabeaufforderung starten.
WinWait, ahk_pid %PID%  ; Warten, bis es erscheint.
ControlSend,, ipconfig{Enter}, cmd.exe  ; Direkt an das Eingabeaufforderung-Fenster senden.

Erstellt eine GUI mit einem Eingabefeld und sendet ihr etwas Text.

Gui, Add, Edit, r10 w500
Gui, Show
Gui, +LastFound
; Dritten Parameter weglassen, um das zuletzt gefundene Fenster zu verwenden.
ControlSend, Edit1, Dies ist eine Textzeile im Eingabefeld.{Enter}
ControlSendRaw, Edit1, Beachten Sie`, dass {Enter} nicht als Enter-Tastendruck gesendet wurde.