Sendet simulierte Tastendrücke an ein Fenster oder Steuerelement.
ControlSend, StrlmntID, Tasten , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText ControlSendRaw, StrlmntID, Tasten , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText
Wenn leer oder weggelassen, werden die Tastendrücke an das oberste Steuerelement des Zielfensters gesendet (oder das Zielfenster selbst, wenn es keine Steuerelemente hat). Andernfalls geben Sie die ClassNN oder den Text des Steuerelements an, oder lassen Sie den Parameter leer und geben Sie ahk_id %StrlmntHwnd% im FensterTitel-Parameter an, um mit dem HWND des Steuerelements zu arbeiten. Einzelheiten finden Sie unter Steuerelementidentifikatoren.
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).
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.
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 (wie von Window Spy angezeigt).
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 bzw. 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.
[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.
Dieser Befehl ist für die Verwendung mit Steuerelementen in einem Nicht-GUI-Fenster vorgesehen, also einem Fenster, das nicht mit dem Gui-Befehl erstellt wurde. Er funktioniert am besten mit den gängigen oder vordefinierten Steuerelementen von Microsoft. Einige Anwendungen verwenden jedoch benutzerdefinierte oder modifizierte Steuerelemente – in diesem Fall funktioniert der Befehl möglicherweise nicht wie erwartet. Für GUI-Steuerelemente ist es in der Regel sinnvoller, GuiControl zu verwenden, sofern es ein entsprechendes Gegenstück gibt.
Im Gegensatz zu Send ignoriert ControlSend die SendMode-Einstellung. ControlSend verwendet die systeminterne PostMessage-Funktion zum Senden von Tastaturmeldungen.
ControlSendRaw ist quasi dasselbe wie ControlSend, außer dass es die in Tasten angegebenen Tastendrücke im Rohzustand sendet, d.h. es findet keine Übersetzung von z.B. {Enter} zu Enter, ^c zu Strg+C usw. statt. 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 StrlmntID-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 SendEvent-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 Eingabefeld (oder ähnliches) handelt, sind die folgenden Befehle in der Regel zuverlässiger und schneller als ControlSend:
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, GuiControl, Winamp automatisieren
Ö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.