ControlSend / ControlSendRaw


Sendet künstliche Tastatureingaben an ein Fenster oder Control.

ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]
ControlSendRaw: Dieselben Parameter wie oben.

Parameter

Control

Entweder die ClassNN (Klassenname und Instanznummer) oder der Name/Text (Aufschrift/Inhalt) des Controls, wie sie mit dem "Window Spy" ermittelt werden können. Bei Angabe von Name/Text wird das Suchergebnis von der aktuellen Einstellung für SetTitleMatchMode beeinflusst. Wenn der Parameter leer gelassen wird, wird das oberste Control des Zielfensters verwendet.

Wenn mit dem HWND (window handle, ahk_id, eindeutige Identifikationsnummer) eines Controls gearbeitet werden soll, wird der Control Parameter leer gelassen und stattdessen ahk_id %ControlHwnd% als WinTitle Parameter angebeben. Das funktioniert auch für verborgene Controls, selbst wenn DetectHiddenWindows auf OFF gesetzt ist. Das HWND eines Controls kann z.B. mit ControlGet Hwnd, MouseGetPos oder DllCall ermittelt werden.

Keys

Die zu sendende Tastenfolge (genaue Beschreibung siehe Send Anweisung). Wenn ein Kommazeichen gesendet werden soll, muss es maskiert (escaped) werden (`,). Die Pause zwischen den einzelnen Zeichen wird durch SetKeyDelay bestimmt.

Anders als bei der Send Anweisung können Mausklicks mit ControlSend nicht gesendet werden. Dafür verwendet man ControlClick.

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

ErrorLevel wird im Falle eines Problems auf 1 gesetzt, sonst auf 0.

Anmerkungen

ControlSendRaw sendet die Zeichen genau wie im Keys Parameter angegeben, anstatt z.b. {Enter} in die ENTER-Taste oder ^c in Control-C, usw. zu übersetzen.

Wenn der Control Parameter weggelassen wird, versucht die Anweisung, direkt an das oberste Control des Zielfensters (das meist das richtige ist) oder an das Zielfenster selbst zu senden, wenn es keine Controls enthält. Das ist nützlich, wenn ein Fenster keine Controls zu enthalten scheint oder man sich keine Gedanken darüber machen will, an welches Control gesendet werden muss.

In der Voreinstellung werden die Modifizierungstasten (Control, Alt, Shift und Win) wie von der Send Anweisung gesendet. Das ermöglicht der Kommandozeile und anderen Konsolfenstern die zuverlässige Erkennung von Großbuchstaben, Steuerzeichen usw.. Es mag die Zuverlässigkeit auch in anderer Beziehung verbessern.

In manchen Fällen jedoch können die Modifizierungstasten das aktive Fenster unerwünscht beeinflussen, besonders dann, wenn der Benutzer während des ControlSend selbst Tastatureingaben macht oder die Alt-Taste gesendet wird (weil Alt das Menü des aktiven Fensters aktiviert). Das kann vermieden werden, indem man explizite Up (Taste losgelassen) und Down (Taste gedrückt) Ereignisse sendet, wie in diesem Beispiel:
ControlSend, Edit1, {Alt down}f{Alt up}, Untitled - Notepad

Mit dieser Methode können Modifizierungstasten (Control/Alt/Shift/Win) auch dann gesendet werden, wenn der Rechner gesperrt ist (z.B. durch das Login-Fenster geschützt).

BlockInput sollte nicht aktiv sein, wenn man mit ControlSend ein Konsolfenster wie die Kommandozeile ansprechen will, weil dann Großbuchstaben und Modifizierungstasten nicht immer korrekt erkannt und verarbeitet werden.

Der Wert von SetKeyDelay bestimmt die Pause zwischen den einzelnen Tasten und damit die Geschwindigkeit, mit der die Tasten gesendet werden. Wenn das Zielfenster die Tastatureingaben nicht zuverlässig verarbeitet, kann man versuchen, die Haltedauer über den zweiten Parameter von SetKeyDelay zu erhöhen, wie in diesen Beispielen:
SetKeyDelay, 10, 10
SetKeyDelay, 0, 10
SetKeyDelay, -1, 0

Wenn das Zielcontrol ein Edit Control ist (oder ein vergleichbares), sind die folgenden Anweisungen normalerweise zuverlässiger und schneller als ControlSend:
Control, EditPaste, Dieser Text wird an der Einfügemarke eingefügt., ControlName, WinTitle
ControlSetText, ControlName, Dieser Text ersetzt den bisherigen Text vollständig., WinTitle

ControlSend kann generell die Menüleiste eines Fensters nicht manipulieren. Um das zu umgehen, verwendet man WinMenuSelectItem. Wenn das wegen der Art der Menüleiste nicht möglich ist, kann man versuchen herauszufinden, welche Nachricht dem gewünschten Menüeintrag zugeordnet ist, wie im SendMessage Tutorial beschrieben ist.

Bei Fenstertiteln und -texten muss die Groß/Kleinschreibung beachtet werden. Verborgene Fenster werden nur gefunden, wenn DetectHiddenWindows vorher auf ON gesetzt wurde.

Siehe auch

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

Beipiele

ControlSend, Edit1, This is a line of text in the notepad window., Untitled
SetTitleMatchMode, 2
ControlSend, , abc, cmd.exe ; Sendet direkt an das Fenster der Kommandozeile.