Send, SendRaw, SendInput, SendPlay, SendEvent

Sendet simulierte Tastendrücke und Mausklicks an das aktive Fenster.

Send Tasten
SendRaw Tasten
SendInput Tasten
SendPlay Tasten
SendEvent Tasten

Parameter

Tasten

Eine Reihe von Tasten, die gesendet werden sollen. Das Komma vor dem ersten Parameter ist optional (wie bei anderen Befehlen auch).

Standardmäßig (also wenn weder SendRaw noch der Raw-Modus oder Text-Modus verwendet wird) haben die Zeichen ^+!#{} eine besondere Bedeutung. Die Zeichen ^+!# repräsentieren die Modifikatortasten Strg, Umschalt, Alt und Win. Sie beeinflussen nur die direkt darauffolgende Taste. Um die entsprechende Modifikatortaste separat zu senden, umschließen Sie den Tastennamen mit geschweiften Klammern. Um die Taste nur gedrückt zu halten oder loszulassen, fügen Sie nach dem Tastennamen das Wort "down" oder "up" an, wie unten gezeigt.

Symbol Taste Drücken Loslassen Beispiele
^ {Ctrl} {Ctrl down} {Ctrl up} Send ^{Home} drückt Strg+Pos1
+ {Shift} {Shift down} {Shift up} Send +abC sendet den Text "AbC"
Send !+a drückt Alt+Umschalt+A
! {Alt} {Alt down} {Alt up} Send !a drückt Alt+A
# {LWin}
{RWin}
{LWin down}
{RWin down}
{LWin up}
{RWin up}
Send #e hält Win gedrückt und drückt dann E

Hinweis: Da Großbuchstaben durch Senden von Umschalt erzeugt werden, hat A in einigen Programmen einen anderen Effekt als a. Zum Beispiel bewirkt !A, dass Alt+Umschalt+A gedrückt wird, und !a, dass Alt+A gedrückt wird. Im Zweifelsfall immer Kleinbuchstaben verwenden.

Die Zeichen {} werden genutzt, um Tastennamen und andere Optionen zu umschließen, und um Zeichen zu senden, die sonst eine spezielle Funktion hätten. Zum Beispiel wird {Tab} Tab drücken und {!} ein normales Ausrufezeichen senden.

[v1.1.27+]: Wenn Sie einen reinen ASCII-Buchstaben (a-z oder A-Z) mit geschweiften Klammern umschließen, zwingen Sie Send, den Buchstaben als virtuellen Tastencode zu senden, egal ob das Zeichen im aktuellen Tastaturlayout existiert oder nicht. Mit anderen Worten: Send a erzeugt den Buchstaben "a", während Send {a} vielleicht je nach Tastaturlayout den Buchstaben "a" erzeugt. Einzelheiten finden Sie unter Bemerkungen.

Send-Varianten

Send: Standardmäßig ist Send synonym mit SendEvent; allerdings kann es via SendMode synonym mit SendInput oder SendPlay gemacht werden.

SendRaw: Ähnlich wie Send, außer dass alle Zeichen in Tasten als direkt geschriebener Text interpretiert und gesendet werden. Weitere Informationen finden Sie unter Raw-Modus.

SendInput und SendPlay [v1.0.43+]: SendInput und SendPlay verwenden die gleiche Syntax wie Send, allerdings sind sie in der Regel schneller und zuverlässiger. Des Weiteren bewirken diese Modi, dass alle physischen Aktivitäten, die der Benutzer via Tastatur oder Maus durchführt, gepuffert (hinausgezögert) werden, bis die Send-Aktion abgeschlossen ist. Dadurch wird verhindert, dass die Tastendrücke des Benutzers mit denen, die gesendet werden, vermischt werden. Sie können SendMode verwenden, um Send synonym mit SendInput oder SendPlay zu machen. Weitere Informationen zu jedem Modus finden Sie unter SendInput und SendPlay weiter unten.

SendEvent [v1.0.43+]: SendEvent sendet Tastendrücke auf dieselbe Weise wie der pre-1.0.43 Send-Befehl. Die Geschwindigkeit, mit welcher die Tastendrücke gesendet werden, wird durch SetKeyDelay beeinflusst.

Spezielle Modi

Die folgenden Modi beeinflussen die Interpretation der Zeichen in Tasten oder das Verhalten von Befehlen, die Tasten senden, wie z. B. Send, SendInput, SendPlay, SendEvent und ControlSend. Diese Modi müssen in Form von {x} in Tasten angegeben werden, wobei x entweder Raw, Text oder Blind ist. Zum Beispiel {Raw}.

Raw-Modus

Der Raw-Modus kann mit {Raw}, SendRaw oder ControlSendRaw aktiviert werden, wodurch alle nachfolgenden Zeichen, einschließlich ^+!#{}, als direkt geschriebener Text interpretiert werden, anstatt dass {Enter} in Enter, ^c in Strg+C usw. übersetzt wird. Send {Raw}{Tab} und SendRaw {Tab} beispielsweise senden {Tab} anstelle von Tab.

Der Raw-Modus hat keinen Einfluss auf die Interpretation von Escapesequenzen, Variablenreferenzen und Ausdrücke. SendRaw, ``100`% beispielsweise sendet die Zeichenkette `100%. Verwendet man ControlSend, müssen direkt geschriebene Kommas zudem mit einem Escapezeichen versehen werden (`,).

Text-Modus [v1.1.27+]

Der Text-Modus kann mit {Text} aktiviert werden, wodurch dasselbe wie der Raw-Modus bewirkt wird, aber ohne den Versuch, Zeichen (außer `r, `n, `t und `b) in Tastencodes umzuwandeln; stattdessen wird für alle übrigen Zeichen die Fallback-Methode angewandt. Dieser Modus verbessert die Zuverlässigkeit von SendEvent, SendInput und ControlSend, da die Zeichen kaum noch vom korrekten Modifikatorstatus abhängig sind. Dieser Modus kann mit dem Blind-Modus kombiniert werden, um das Loslassen von Modifikatortasten zu vermeiden: Send {Blind}{Text}Ihr Text. Einige Anwendungen setzen jedoch voraus, dass die Modifikatortasten losgelassen werden müssen.

`n, `r und `r`n werden in einen einzelnen Enter-Tastendruck übersetzt - ganz im Gegensatz zum Standardverhalten und dem Raw-Modus, wo `r`n in zwei Enter-Tastendrücke übersetzt wird. `t wird in Tab und `b in Backspace übersetzt, während alle anderen Zeichen ohne Übersetzung gesendet werden.

[v1.1.29+]: Der Text-Modus ignoriert, wie der Blind-Modus auch, SetStoreCapsLockMode (das heißt, dass der Status der Feststell-Taste nicht geändert wird) und wartet nicht auf das Loslassen von Win. Der Grund dafür ist, dass der Text-Modus in der Regel nicht vom Status der Feststell-Taste abhängig ist und nicht den systeminternen Win+L-Hotkey auslösen kann. Dies gilt jedoch nur, wenn Tasten mit {Text} oder {Blind}{Text} beginnt.

Blind-Modus

Der Blind-Modus kann mit {Blind} aktiviert werden, wodurch das Skript mehr Kontrolle erhält, indem eine Reihe von Dingen deaktiviert werden, die normalerweise automatisch vorgenommen werden, damit die Dinge wie erwartet funktionieren. {Blind} muss das erste Element in der Zeichenkette sein, um den Blind-Modus zu aktivieren. Dieser Modus hat folgende Auswirkungen:

AutoHotkey verwendet automatisch den Blind-Modus beim Neubelegen einer Taste. Zum Beispiel würde die Neubelegung a::b Folgendes erzeugen: 1) "b" wenn man "a" eingibt; 2) großes "B" wenn man ein großes "A" eingibt; und 3) Strg+B wenn man Strg+A eingibt.

SendRaw und ControlSendRaw unterstützen kein {Blind}; verwenden Sie stattdessen {Blind}{Raw}.

Der Blind-Modus wird nur teilweise von SendPlay unterstützt, besonders wenn es um die Modifikatortasten (Strg, Alt, Umschalt und Win) geht.

Tastennamen

Die folgende Tabelle listet alle speziellen Tasten auf, die gesendet werden können (jeder Tastenname muss mit geschweiften Klammern umschlossen werden):

Tastenname Beschreibung
{F1} - {F24} Funktionstasten. Zum Beispiel: {F12} ist F12.
{!} !
{#} #
{+} +
{^} ^
{{} {
{}} }
{Enter} Enter im Hauptblock
{Escape} oder {Esc} Esc
{Space} Leer (nur für Leerzeichen notwendig, die am Anfang oder Ende der zu sendenden Zeichenkette vorkommen - mittige Leerzeichen können direkt geschrieben werden)
{Tab} Tab
{Backspace} oder {BS} Backspace
{Delete} oder {Del} Entf
{Insert} oder {Ins} Einfg
{Up} (Nach-Oben-Taste) im Hauptblock
{Down} (Nach-Unten-Taste) im Hauptblock
{Left} (Nach-Links-Taste) im Hauptblock
{Right} (Nach-Rechts-Taste) im Hauptblock
{Home} Pos1 im Cursorblock
{End} Ende im Cursorblock
{PgUp} Bild↑ im Cursorblock
{PgDn} Bild↓ im Cursorblock
{CapsLock} Feststell (in Win 2k/XP ist SetCapsLockState zuverlässiger). Zum Senden von {CapsLock} ist möglicherweise vorher SetStoreCapsLockMode Off erforderlich.
{ScrollLock} Rollen (siehe auch: SetScrollLockState)
{NumLock} Num (siehe auch: SetNumLockState)
{Control} oder {Ctrl} Strg (technische Info: Sendet die neutrale virtuelle Taste, aber den linken Scancode)
{LControl} oder {LCtrl} Linke Strg-Taste (technische Info: Sendet nicht die neutrale, sondern die linke virtuelle Taste)
{RControl} oder {RCtrl} Rechte Strg-Taste
{Control down} oder {Ctrl down} Hält Strg gedrückt, bis {Ctrl up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, verwenden Sie {RCtrl down} und {RCtrl up}.
{Alt} Alt (technische Info: Sendet die neutrale virtuelle Taste, aber den linken Scancode)
{LAlt} Linke Alt-Taste (technische Info: Sendet nicht die neutrale, sondern die linke virtuelle Taste)
{RAlt} Rechte Alt-Taste (oder AltGr, abhängig von der Tastaturbelegung)
{Alt down} Hält Alt gedrückt, bis {Alt up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, verwenden Sie {RAlt down} und {RAlt up}.
{Shift} Umschalt (technische Info: Sendet die neutrale virtuelle Taste, aber den linken Scancode)
{LShift} Linke Umschalt-Taste (technische Info: Sendet nicht die neutrale, sondern die linke virtuelle Taste)
{RShift} Rechte Umschalt-Taste
{Shift down} Hält Umschalt gedrückt, bis {Shift up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, verwenden Sie {RShift down} und {RShift up}.
{LWin} Linke Win-Taste
{RWin} Rechte Win-Taste
{LWin down} Hält die linke Win-Taste gedrückt, bis {LWin up} gesendet wird
{RWin down} Hält die rechte Win-Taste gedrückt, bis {RWin up} gesendet wird
{AppsKey} Menü (öffnet das Rechtsklick- bzw. Kontextmenü)
{Sleep} Sleep.
{ASC nnnnn}

Sendet eine Alt+nnnnn-Ziffernblock-Tastenkombination. Dies ermöglicht es, Sonderzeichen zu erzeugen, die auf der Tastatur normalerweise nicht vorhanden sind. Um ASCII-Zeichen zu generieren, geben Sie eine Nummer zwischen 1 und 255 an. Um ANSI-Zeichen zu generieren (Standard in den meisten Sprachen), geben Sie zuerst eine 0 und danach eine Nummer zwischen 128 und 255 an; zum Beispiel {Asc 0133}.

Um Unicode-Zeichen zu generieren, geben Sie eine Nummer zwischen 256 und 65535 an (ohne Null am Anfang). Allerdings wird das nicht von jeder Anwendung unterstützt. Alternativen dazu finden Sie im nächsten Abschnitt.

{U+nnnn}

[AHK_L 24+]: Sendet ein Unicode-Zeichen, wobei nnnn der hexadezimale Wert des Zeichens ohne 0x-Präfix ist. Diese Methode ist in den Unicode-Versionen von AutoHotkey üblicherweise nicht notwendig, weil ihr Send und ControlSend von sich aus Unicode-Text unterstützen.

SendInput() oder WM_CHAR wird zum Senden des Zeichens verwendet, außerdem wird der aktuelle Send-Modus ignoriert. Zeichen, die auf diese Weise gesendet werden, lösen in der Regel keine Tastaturkurzbefehle oder Hotkeys aus.

{vkXX}
{scYYY}
{vkXXscYYY}

Sendet einen Tastendruck, der den virtuellen Tastencode XX und den Scancode YYY hat. Zum Beispiel: Send {vkFFsc159}. Lässt man den sc- oder vk-Bereich weg, wird an seiner Stelle der am besten geeignete Wert gesendet.

Die Werte für XX und YYY sind hexadezimal und können üblicherweise über den Menüpunkt View-> Key history im Hauptfenster ermittelt werden. Siehe auch: Sondertasten

Warnung: Das Kombinieren von vk und sc auf diese Weise ist nur mit Send gültig. Vor [v1.1.27] war es so, dass Hotkeys zwar erlaubt waren, aber alle nicht-hexadezimalen Zeichen nach XX ignoriert wurden.

{Numpad0} - {Numpad9} Ziffernblocktasten (wenn Num eingeschaltet ist). Zum Beispiel: {Numpad5} ist 5.
{NumpadDot} , (Komma-Taste im Ziffernblock) (wenn Num eingeschaltet ist)
{NumpadEnter} Enter im Ziffernblock
{NumpadMult} * (Multiplikationstaste im Ziffernblock)
{NumpadDiv} / (Divisionstaste im Ziffernblock)
{NumpadAdd} + (Additionstaste im Ziffernblock)
{NumpadSub} - (Subtraktionstaste im Ziffernblock)
{NumpadDel} Entf im Ziffernblock (diese und die nachfolgenden Ziffernblocktasten sind nur verwendbar, wenn Num ausgeschaltet ist)
{NumpadIns} Einfg im Ziffernblock
{NumpadClear} Funktionslose Taste im Ziffernblock (üblicherweise 5, wenn Num ausgeschaltet ist).
{NumpadUp} (Nach-Oben-Taste) im Ziffernblock
{NumpadDown} (Nach-Unten-Taste) im Ziffernblock
{NumpadLeft} (Nach-Links-Taste) im Ziffernblock
{NumpadRight} (Nach-Rechts-Taste) im Ziffernblock
{NumpadHome} Pos1 im Ziffernblock
{NumpadEnd} Ende im Ziffernblock
{NumpadPgUp} Bild↑ im Ziffernblock
{NumpadPgDn} Bild↓ im Ziffernblock
{Browser_Back} Browser "Zurück"
{Browser_Forward} Browser "Vorwärts"
{Browser_Refresh} Browser "Aktualisieren"
{Browser_Stop} Browser "Stopp"
{Browser_Search} Browser "Suchen"
{Browser_Favorites} Browser "Favoriten"
{Browser_Home} Startet den Browser und öffnet die Startseite
{Volume_Mute} Stummschaltung der Master-Lautstärke ein-/ausschalten. Normalerweise das gleiche wie SoundSet, +1, , mute.
{Volume_Down} Master-Lautstärke leiser machen. Normalerweise das gleiche wie SoundSet, -5.
{Volume_Up} Master-Lautstärke lauter machen. Normalerweise das gleiche wie SoundSet, +5.
{Media_Next} Media Player "Nächster Track"
{Media_Prev} Media Player "Vorheriger Track"
{Media_Stop} Media Player "Stopp"
{Media_Play_Pause} Media Player "Wiedergabe/Anhalten"
{Launch_Mail} E-Mail-Programm öffnen
{Launch_Media} Media Player öffnen
{Launch_App1} Benutzerdefiniertes Programm 1 öffnen
{Launch_App2} Benutzerdefiniertes Programm 2 öffnen
{PrintScreen} Druck
{CtrlBreak} Strg+Pause
{Pause} Pause
{Click [Optionen]}
[v1.0.43+]
Sendet einen Mausklick. Verwendet die gleichen Optionen wie die des Click-Befehls. Send {Click} beispielsweise klickt mit der linken Maustaste einmal auf die aktuelle Position des Mauszeigers, während Send {Click 100 200} auf die Koordinaten 100, 200 klickt (basierend auf CoordMode). Um den Mauszeiger ohne Klicken zu verschieben, geben Sie nach den Koordinaten eine 0 an; zum Beispiel: Send {Click 100 200 0}. Die Verzögerung zwischen den Mausklicks wird durch SetMouseDelay bestimmt (nicht SetKeyDelay).
{WheelDown}, {WheelUp}, {WheelLeft}, {WheelRight}, {LButton}, {RButton}, {MButton}, {XButton1}, {XButton2}

Sendet ein Maustastenereignis auf die aktuelle Position des Mauszeigers (um die Position und sonstige Optionen festzulegen, verwenden Sie {Click} oben). Die Verzögerung zwischen den Mausklicks wird durch SetMouseDelay bestimmt. WheelLeft/Right benötigen [v1.0.48+], allerdings funktionieren sie nicht in Betriebssystemen älter als Windows Vista.

LButton und RButton beziehen sich auf die "physische" linke bzw. rechte Maustaste, wenn sie mit Send verwendet werden, aber auf die "logische" linke bzw. rechte Maustaste, wenn sie mit Hotkeys verwendet werden. Mit anderen Worten: Wenn der Benutzer die Maustasten via Systemsteuerung vertauscht hat, wird {LButton} einen logischen Rechtsklick ausführen, während ein physischer Linksklick den Hotkey RButton:: auslösen wird. Gleiches gilt für {RButton} und LButton::. Mit {Click} kann immer ein logischer Klick ausgeführt werden.

{Blind} Aktiviert den Blind-Modus, wodurch das Skript mehr Kontrolle erhält, indem eine Reihe von Dingen deaktiviert werden, die normalerweise automatisch vorgenommen werden, damit die Dinge wie erwartet funktionieren. Die Zeichenkette {Blind} muss am Anfang der Zeichenkette stehen.
{Raw}
[v1.0.43+]
Aktiviert den Raw-Modus. Dieser bewirkt, dass die folgenden Zeichen als direkt geschriebener Text interpretiert werden: ^+!#{}. Obwohl die Zeichenkette {Raw} nicht am Anfang der Zeichenkette stehen muss, bleibt sie, wenn sie einmal angegeben wurde, für den Rest der Zeichenkette aktiv.
{Text}
[v1.1.27+]
Aktiviert den Text-Modus. Dieser sendet eine Kette von Zeichen anstelle von Tastendrücken. Genau wie der Raw-Modus bewirkt der Text-Modus, dass die folgenden Zeichen als direkt geschriebener Text interpretiert werden: ^+!#{}. Obwohl die Zeichenkette {Text} nicht am Anfang der Zeichenkette stehen muss, bleibt sie, wenn sie einmal angegeben wurde, für den Rest der Zeichenkette aktiv.

Mehrfaches oder haltendes Drücken einer Taste

Mehrfaches Drücken: Umschließen Sie den Namen der Taste, gefolgt von der Anzahl der Wiederholungen, in geschweiften Klammern. Zum Beispiel:

Send {DEL 4}  ; Drückt viermal die ENTF-Taste.
Send {S 30}   ; Sendet 30-mal ein großes S.
Send +{TAB 4}  ; Drückt viermal UMSCHALT+TAB.

Halten oder Loslassen: Umschließen Sie den Namen der Taste, gefolgt von dem Wort Down oder Up, in geschweiften Klammern. Zum Beispiel:

Send {b down}{b up}
Send {TAB down}{TAB up}
Send {Up down}  ; Drückt die NACH-OBEN-Taste nach unten.
Sleep 1000  ; Hält sie eine Sekunde lang gedrückt.
Send {Up up}  ; Lässt die NACH-OBEN-Taste los.

Wenn eine Taste mit der Methode oben gedrückt gehalten wird, erfolgt keine Auto-Wiederholung, wie es beim physischen Gedrückthalten geschehen würde (Auto-Wiederholung ist nämlich ein Treiber/Hardware-Feature). Allerdings kann mit einer Schleife das Auto-Wiederholen künstlich erzeugt werden. Das folgende Beispiel sendet 20-mal die Tabulatortaste:

Loop 20
{
    Send {Tab down}  ; Auto-Wiederholen besteht aus fortlaufenden Down-Ereignissen (ohne Up-Ereignisse).
    Sleep 30  ; Die Anzahl der Millisekunden zwischen den Tastendrücken (oder verwenden Sie SetKeyDelay).
}
Send {Tab up}  ; Lässt die Taste los.

Standardmäßig lässt Send eine Modifikatortaste (Strg, Umschalt, Alt und Win) nicht automatisch los, wenn diese Modifikatortaste durch Senden "nach unten gedrückt" wurde. Send a beispielsweise verhält sich eventuell ähnlich wie Send {Blind}{Ctrl up}a{Ctrl down}, wenn der Benutzer Strg physisch gedrückt hält, während Send {Ctrl Down}, gefolgt von Send a, Strg+A erzeugen würde. DownTemp und DownR können genutzt werden, um dieses Verhalten zu überschreiben. DownTemp und DownR haben die gleiche Wirkung wie Down, außer bei den Modifikatortasten (Strg, Umschalt, Alt und Win).

DownTemp teilt nachfolgenden Sends mit, dass die Taste nicht im permanent gedrückten Zustand ist und jederzeit losgelassen werden kann, wenn ein Tastendruck dies erfordert. Send {Control DownTemp}, später gefolgt von Send a, würde zum Beispiel A erzeugen, nicht Strg+A. Jede Verwendung von Send kann dazu führen, dass der Modifikator permanent losgelassen wird, daher ist DownTemp nicht gerade die ideale Wahl, um Modifikatortasten neu zu belegen.

[v1.1.27+]: DownR (das "R" bedeutet Remapping bzw. Neubelegen, was dessen Hauptzweck darstellt) teilt nachfolgenden Sends mit, dass die Taste, wenn sie automatisch losgelassen wird, nach Abschluss des Sends erneut gedrückt werden soll. So würde z. B. Send {Control DownR}, gefolgt von Send a, A erzeugen, nicht Strg+A, lässt aber Strg für eventuelle Tastaturkurzbefehle im gedrückten Zustand. Mit anderen Worten hat DownR denselben Effekt wie, als würde man die Taste physisch drücken.

Wenn ein Zeichen nicht zu einer virtuellen Taste im aktuellen Tastaturlayout gehört, kann es weder "gedrückt" noch "losgelassen" werden. Send {µ up} beispielsweise hat keinen Einfluss auf die meisten Layouts, während Send {µ down} das gleiche wie Send µ ist.

Allgemeine Bemerkungen

Zeichen vs. Tasten: Standardmäßig werden Zeichen gesendet, indem sie zunächst in Tastendrücke übersetzt werden. Wenn diese Übersetzung nicht möglich ist (also wenn das aktuelle Tastaturlayout keine Taste oder Tastenkombination enthält, die dieses Zeichen erzeugen würde), wird das Zeichen mittels einer der folgenden Fallback-Methoden gesendet:

Hinweis: Zeichen, die mit einer der oben genannten Methoden gesendet werden, lösen in der Regel keine Tastaturkurzbefehle oder Hotkeys aus.

[v1.1.27+]: Jedes Zeichen im Bereich von a-z oder A-Z (reine ASCII-Buchstaben), das im aktuellen Tastaturlayout nicht vorhanden ist, kann entweder als Zeichen oder als entsprechender virtueller Tastencode (vk41-vk5A) gesendet werden:

Wenn der Buchstabe im aktuellen Tastaturlayout vorhanden ist, wird er als Tastencode gesendet, den auch immer das Layout mit diesem Buchstaben assoziiert (es sei denn, der Text-Modus wird genutzt, dann wird das Zeichen auf andere Weise gesendet). Mit anderen Worten: Der obige Abschnitt ist nur für nicht-lateinische Layouts relevant, wie z. B. Russisch.

Modifikatorstatus: Wenn Send den Status der Modifikatortasten Win oder Alt ändern muss (z. B. wenn der Benutzer eine dieser Tasten gedrückt hält), kann es zusätzliche Tastendrücke einschleusen (standardmäßig Strg), um zu verhindern, dass das Startmenü oder das Fenstermenü angezeigt wird. Weitere Informationen finden Sie unter #MenuMaskKey.

BlockInput vs. SendInput/SendPlay: Obwohl der BlockInput-Befehl genutzt werden kann, um zu verhindern, dass physische Eingaben des Benutzers die Ausführung der simulierten Tastendrücke stören, ist es oft besser, SendInput oder SendPlay zu nutzen, damit Tastendrücke und Mausklicks nicht mehr unterbrochen werden können. SendInput/Play verhindert im Gegensatz zu BlockInput, dass die Eingaben des Benutzers während des Sendens verworfen werden; stattdessen werden solche Tastendrücke gepuffert und später gesendet.

Beim Senden vieler Tastendrücke kann ein Fortsetzungsbereich verwendet werden, um die Übersichtlichkeit und Wartbarkeit des Skripts zu verbessern.

Da das Betriebssystem das Simulieren von Strg+Alt+Entf nicht erlaubt, wird so etwas wie Send ^!{Delete} nicht funktionieren.

Send hat möglicherweise keine Wirkung unter Windows Vista oder höher, wenn das aktive Fenster mit administrativen Rechten läuft und das Skript nicht. Dies ist auf einen Sicherheitsmechanismus zurückzuführen, der sich "User Interface Privilege Isolation" (UIPI) nennt.

SendInput [v1.0.43+]

SendInput ist grundsätzlich der bevorzugte Modus, um Tastendrücke und Mausklicks zu senden, da es schneller und zuverlässiger als die anderen Methoden ist. In den meisten Fällen wird eine Zeichenkette via SendInput nahezu verzögerungsfrei gesendet, sogar wenn es sich um sehr lange Zeichenketten handelt. Da SendInput so schnell ist, ist es auch zuverlässiger, weil es weniger Möglichkeiten gibt, dass ein anderes Fenster unerwartet auftaucht und die Tastendrücke abfängt. Die Zuverlässigkeit verbessert sich nochmals durch die Tatsache, dass alles, was der Benutzer während eines SendInputs eingibt, hinausgezögert wird, bis es abgeschlossen ist.

Im Gegensatz zu den anderen Send-Modi ist SendInput auf ca. 5000 Zeichen begrenzt (was je nach Version und Leistungseinstellungen des Betriebssystems variieren kann). Zeichen und Ereignisse, die über diesen Grenzwert hinausgehen, werden nicht gesendet.

Hinweis: SendInput ignoriert SetKeyDelay, weil das Betriebssystem keine Verzögerung in diesem Modus unterstützt. Wenn SendInput allerdings aufgrund der unten genannten Bedingungen auf SendEvent zurückwechselt, wird SetKeyDelay -1, 0 verwendet (es sei denn, die Tastenverzögerung von SendEvent ist -1, -1, dann wird -1, -1 verwendet). Wenn SendInput auf SendPlay zurückwechselt, wird die Tastenverzögerung von SendPlay verwendet.

Wenn ein Skript - außer das Skript, das SendInput ausführt - einen Low-Level-Tastatur-Hook installiert hat, wechselt SendInput automatisch auf SendEvent zurück (oder auf SendPlay, wenn SendMode InputThenPlay wirksam ist). Dieses Verhalten ist notwendig, weil ein externer Hook alle Vorteile von SendInput zunichtemacht, wodurch SendInput gegenüber SendPlay und SendEvent unterlegen ist. Da SendInput jedoch nicht in der Lage ist, einen Low-Level-Hook in Programmen außer [AutoHotkey v1.0.43+] zu erkennen, wechselt es in solchen Fällen nicht zurück, wodurch es weniger zuverlässig ist als SendPlay/Event.

Wenn SendInput Mausklicks mithilfe von z. B. {Click} sendet, während CoordMode Mouse, Relative aktiv ist (die Standardeinstellung), wird jeder Klick relativ zum Fenster sein, das vor dem Senden aktiv war. Wenn SendInput also absichtlich ein anderes Fenster aktiviert (z. B. mit ALT+TAB), werden die Koordinaten der nachfolgenden Klicks innerhalb des gleichen Befehls falsch sein, weil sie immer noch relativ zum alten statt zum neuen Fenster sind.

SendPlay [v1.0.43+]

Warnung: SendPlay hat möglicherweise überhaupt keine Wirkung, wenn die Benutzerkontensteuerung (UAC) aktiviert ist, auch wenn das Skript als Administrator ausgeführt wird. Weitere Informationen finden Sie in der FAQ.

Der größte Vorteil von SendPlay gegenüber den anderen Modi ist dessen Fähigkeit, Tastendrücke und Mausklicks in einer breiteren Auswahl von Videospielen zu erzeugen. Zum Beispiel könnten Hotstrings in einem Videospiel nur funktionieren, wenn sie die SendPlay-Option haben.

Von den drei Send-Modi ist SendPlay der ungewöhnlichste Modus, weil er per se keine Tastendrücke und Mausklicks simuliert. Stattdessen erstellt dieser Modus eine Reihe von Ereignissen (Meldungen), die direkt in das aktive Fenster einfließen (ähnlich wie ControlSend, aber auf niedrigerem Level). Demzufolge kann SendPlay keine Hotkeys oder Hotstrings auslösen.

Wie bei SendInput werden die Tastendrücke von SendPlay nicht mit den Tastendrücken des Benutzers vermischt. Wenn der Benutzer also während eines SendPlays etwas eingibt, werden solche Tastendrücke hinausgezögert, bis es abgeschlossen ist.

SendPlay ist zwar deutlich langsamer als SendInput, aber schneller als der traditionelle SendEvent-Modus (selbst wenn Tastenverzögerung -1 ist).

Beide Win-Tasten (LWin und RWin) werden während eines SendPlays automatisch blockiert, wenn der Tastatur-Hook installiert ist. Dadurch wird verhindert, dass das Startmenü angezeigt wird, wenn der Benutzer während des Sendens versehentlich Win drückt. Alle anderen Tasten müssen hingegen nicht blockiert werden, weil das Betriebssystem diese automatisch hinauszögert (via Pufferung), bis das SendPlay abgeschlossen ist.

SendPlay verwendet nicht die Standardeinstellungen von SetKeyDelay und SetMouseDelay. Stattdessen erfolgt überhaupt keine Verzögerung, was aber wie folgt geändert werden kann:

SetKeyDelay, 0, 10, Play  ; Beachten Sie, dass sowohl 0 als auch -1 das gleiche sind im SendPlay-Modus.
SetMouseDelay, 10, Play

SendPlay kann Feststell, Num oder Rollen weder ein- noch ausschalten. SendPlay kann zudem den Status einer Taste, wie von GetKeyState() gesehen, nicht ändern, es sei denn, die Tastendrücke werden an eines der eigenen Fenster des Skripts gesendet. Selbst dann können Änderungen an den linken/rechten Modifikatortasten (z. B. RControl) nur über ihre neutralen Gegenstücke (z. B. Control) erkannt werden. Außerdem gelten für SendPlay noch weitere Einschränkungen, die auf der SendMode-Seite zu finden sind.

Im Gegensatz zu SendInput und SendEvent kann der Benutzer ein SendPlay durch Drücken von Strg+Alt+Entf oder Strg+Esc unterbrechen. In diesem Fall werden die restlichen Tastendrücke nicht gesendet, aber das Skript weiter ausgeführt, als wäre nichts geschehen.

Obwohl SendPlay in der Lage ist, LWin- und RWin-Ereignisse zu senden, werden diese direkt an das aktive Fenster gesendet, anstatt ihre native Betriebssystemfunktion durchzuführen. Um das zu umgehen, verwenden Sie SendEvent. SendEvent #r beispielsweise würde das Ausführen-Dialogfenster des Startmenüs anzeigen.

SendMode, SetKeyDelay, SetStoreCapsLockMode, Escapesequenzen (z. B. `%), ControlSend, BlockInput, Hotstrings, WinActivate

Beispiele

Schreibt eine zweizeilige Signatur.

Send Mit freundlichen Grüßen,{enter}Max Mustermann

Wählt Datei->Speichern im Menü aus (ALT+D, gefolgt von S).

Send !ds

Springt an das Ende des Textes und sendet viermal UMSCHALT+NACH-LINKS.

Send {End}+{Left 4}

Sendet eine lange Reihe von Rohzeichen mit der schnellsten Methode.

SendInput {Raw}Eine lange Reihe von Rohzeichen, die mit der schnellsten Methode gesendet wurden.