Funktionreferenz


ControlSend

Beschreibung anzeigen in

Sendet eine Folge von Zeichen (Tastendrücken) an ein Control.

ControlSend ( "title", "text", controlID, "string" [, flag = 0] )

Parameter

title Der Titel des Fensters, auf das zugegriffen werden soll. Siehe spezielle Titeldefinition.
text Der Text des Fensters, auf das zugegriffen werden soll. Siehe spezielle Textdefinition.
ControlID Das zu beeinflussende Control. Siehe Controls.
string Folge von Zeichen, die zu dem Control gesendet werden soll.
flag [optional] Ändert die Bedeutung der "Tastendrücke":
    $SEND_DEFAULT (0) = Der Text enthält spezielle Zeichen wie "+" und "!" um SHIFT und ALT abzubilden
    $SEND_RAW (1) = Tasten werden als RAW-Format (unbearbeitet) gesendet.

Die Konstanten sind in "AutoItConstants.au3" definiert.

Rückgabewert

Erfolg: Gibt 1 zurück.
Fehler: Gibt 0 zurück, falls das Fenster bzw. Control nicht gefunden wurde.

Bemerkungen

ControlSend() arbeitet ähnlich wie Send(), aber es kann Tastendrücke direkt an ein beliebiges Fenster bzw. Control senden und nicht nur an das gerade aktive Fenster.

Nur bei Kommandozeilen-Fenstern (DOS-Boxen) arbeitet ControlSend() unzuverlässig, weil diese anders funktionieren als normale Fenster (scheint physische Zustände zu überprüfen, anstatt den String entgegen zu nehmen).
Bei normalen Fenstern sollte ControlSend() wesentlich zuverlässiger als ein normaler "Send" arbeiten. - Und ja, es kann wirklich Shift, Ctrl, Alt usw. senden.

Wie bereits in der Hilfe zum Send()-Befehl erwähnt, können keine Tastaturen simuliert werden, die unterschiedliche Zeichen senden, je nachdem, ob sie im CAPS-LOCK oder SHIFT-Modus sind (z.B. die tschechische Tastatur). Zur Problemumgehung sollte die Funktion ControlSetText verwendet werden.

Auf das Control muss möglicherweise zuerst mit dem ControlFocus()-Befehl ein Fokus gesetzt werden, besonders wenn es mit einer Control-ID angesprochen wird, die von dem Skript selbst erzeugt wurde.

Opt("SendKeyDelay",...) ändert die Länge der kurzen Pause zwischen den gesendeten Tastenzeichen.
Opt("SendKeyDownDelay",...) ändert die Zeitdauer, wie lange eine Taste gedrückt bleibt, bevor sie wieder gelöst wird.

Verwandte Funktionen

ControlCommand, ControlFocus, ControlSetText, Send, SendKeyDelay (Option), SendKeyDownDelay (Option)

Beispiel

Example()

Func Example()
    ; Startet den Editor
    Run("notepad.exe")

    ; Wartet maximal 10 Sekunden bis das Editorfenster erscheint.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Wartet 2 Sekunden.
    Sleep(2000)

    ; Sendet einen Textstring an das Edit-Control des Editors. Dabei wird für den "title" Parameter von ControlSend das von WinWait zurückgegebenen Handle verwendet.
    ControlSend($hWnd, "", "Edit1", "This is some text")

    ; Wartet 2 Sekunden.
    Sleep(2000)

    ; Schließt das Editorfenster durch die Verwendung des von WinWait zurückgegebenen Handles.
    WinClose($hWnd)

    ; Nun erscheint eine Meldung mit der Frage, ob die Änderungen gespeichert werden sollen.
    ; Der Klassenname (classname) des Fenster lautet "#32770".
    ; Anschließend wird die "TAB"-Taste gedrückt um zum zweiten Button zu wechseln. Dieser wird automatisch durch drücken der "ENTER"-Taste betätigt, so dass die Datei nicht gespeichert wird.
    WinWaitActive("[CLASS:#32770]")
    Sleep(500)
    Send("{TAB}{ENTER}")
EndFunc   ;==>Example