ControlSend / ControlSendText

Sendet simulierte Tastendrücke oder Text an ein Fenster oder Steuerelement.

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

Parameter

Tasten

Typ: Zeichenkette

Eine Reihe von Tasten, die gesendet werden sollen (weitere Informationen finden Sie auf der Send-Seite). Die Geschwindigkeit, mit der die Zeichen gesendet werden, wird durch SetKeyDelay beeinflusst.

Im Gegensatz zur Send-Funktion kann ControlSend keine Mausklicks senden. Verwenden Sie stattdessen ControlClick.

Steuerelement

Typ: Zeichenkette, Integer oder Objekt

Wenn weggelassen, werden die Tastendrücke direkt an das Zielfenster gesendet, anstatt an eines der darin enthaltenen Steuerelemente (ein Beispiel finden Sie unter Winamp automatisieren). Andernfalls geben Sie die ClassNN-Bezeichnung, den Text oder die HWND-Nummer des Steuerelements an, oder ein Objekt mit einer Hwnd-Eigenschaft. Einzelheiten finden Sie unter Der Steuerelement-Parameter.

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.

Fehlerbehandlung

Es wird ein TargetError ausgelöst, wenn das Fenster oder Steuerelement nicht gefunden werden konnte.

Bemerkungen

ControlSendText sendet die einzelnen Zeichen des Tasten-Parameters ohne Übersetzung von z.B. {Enter} in Enter, ^c in Strg+C und so weiter. Weitere Informationen finden Sie unter Text-Modus. {Raw} oder {Text} kann auch bei ControlSend verwendet werden.

Wenn der Steuerelement-Parameter weggelassen wird, versucht diese Funktion, 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 der Send-Funktion 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 "{Alt down}f{Alt up}", "Edit1", "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:

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

ControlSend ist normalerweise nicht in der Lage, die Menüleiste eines Fensters zu manipulieren. Um das zu umgehen, verwenden Sie MenuSelect. 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. `n) , Control-Funktionen, 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 "Dies ist eine Textzeile in Notepad.{Enter}", "Edit1"
ControlSendText "Beachten Sie, dass {Enter} nicht als Enter-Tastendruck gesendet wurde.", "Edit1"

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.

MeineGui := Gui()
MeineGui.Add("Edit", "r10 w500")
MeineGui.Show()
ControlSend "Dies ist eine Textzeile im Eingabefeld.{Enter}", "Edit1", MeineGui
ControlSendText "Beachten Sie, dass {Enter} nicht als Enter-Tastendruck gesendet wurde.", "Edit1", MeineGui