Send[Raw|Input|Play|Event]: Tasten & Klicks senden

Sendet simulierte Tastatureingaben und Mausklicks zum aktiven Fenster.

Send Tasten
SendRaw Tasten
SendInput Tasten
SendPlay Tasten
SendEvent Tasten

Parameter

Tasten

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

Raw-Modus - SendRaw oder {Raw}: Die Zeichen ^+!#{} werden als direkt geschriebener Text interpretiert, anstatt z. B. {Enter} in Enter, ^c in Strg+C usw. zu übersetzen. Um den Raw-Modus bei SendInput, SendPlay, SendEvent oder ControlSend zu verwenden, gibt man {Raw} als erstes Element in der Zeichenkette an; zum Beispiel: SendInput {Raw}abc.

Der Raw-Modus hat keinen Einfluss auf die Interpretation von Escapesequenzen, Variablenverweise und Ausdrücke. Zum Beispiel würde SendRaw, ``100`% die Zeichenkette `100% senden. Beim ControlSend müssen zudem direkt geschriebene Kommas mit einem Escapezeichen versehen werden (`,).

Text-Modus - {Text} [v1.1.27+]: Ähnlich wie der Raw-Modus, nur dass kein Versuch unternommen wird, 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 wesentlich weniger vom korrekten Modifikatorstatus abhängig sind. Der Text-Modus kann mit dem Blind-Modus kombiniert werden, um das Loslassen von Modifikatortasten zu vermeiden: Send {Blind}{Text}Ihr Text. In einigen Anwendungen müssen die Modifikatortasten jedoch losgelassen werden.

`n, `r und `r`n werden in einen einzelnen Enter-Tastendruck umgewandelt, im Gegensatz zum Normal- und Raw-Modus, die `r`n in zwei Enter-Tastendrücke umwandeln. `t wird in Tab und `b in Backspace umgewandelt, alle anderen Zeichen werden ohne Umwandlung gesendet.

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

Normal-Modus: Wenn der Raw- oder Text-Modus nicht aktiv ist, haben folgende Symbole eine besondere Bedeutung: !+^#{}

Die Modifikatoren !+^# beeinflussen nur die direkt darauffolgende Taste. Um die entsprechende Modifikatortaste separat zu senden, umschließt man den Tastennamen mit geschweiften Klammern. Um eine Taste einfach nur zu drücken (gedrückt halten) oder loszulassen, muss nach dem Tastennamen das Wort "down" oder "up" erfolgen, wie unten gezeigt.

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

Mit geschweiften Klammern werden Tastennamen und andere Optionen umschlossen, um spezielle Zeichen als direkt geschriebener Text zu senden. Zum Beispiel wäre {Tab} die Tab-Taste und {!} ein direkt geschriebenes Ausrufezeichen.

[v1.1.27+]: Umschließt man einen reinen ASCII-Buchstaben (a-z oder A-Z) mit geschweiften Klammern, wird stattdessen sein entsprechender virtueller Tastencode gesendet, auch wenn das Zeichen im aktuellen Tastaturlayout nicht vorhanden ist. Das heißt, dass Send a den Buchstaben "a" erzeugen würde, während Send {a} je nach Tastaturlayout ein "a" erzeugt oder nicht. Einzelheiten finden Sie unter Bemerkungen.

Hinweis: Großbuchstaben werden durch Senden der Umschalt-Taste erzeugt, daher würde z. B. A in einigen Programmen eine andere Wirkung als a erzielen. Zum Beispiel würde !A Alt+Umschalt+A und !a Alt+A drücken. Im Zweifelsfall sollte man immer Kleinbuchstaben verwenden.

Blind-Modus - {Blind}: Der Blind-Modus gibt dem Skript mehr Kontrolle, indem er eine Reihe von Dingen deaktiviert, die normalerweise automatisch ausgeführt werden, damit die Dinge wie erwartet funktionieren. {Blind} muss das erste Element in der Zeichenkette sein, um den Blind-Modus zu aktivieren. Er hat folgende Auswirkungen:

Der Blind-Modus wird beim Neubelegen einer Taste automatisch verwendet. 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 oder ControlSendRaw unterstützen kein {Blind}; verwenden Sie stattdessen {Blind}{Raw}.

Desweiteren unterstützt SendPlay den Blind-Modus nur unvollständig, besonders im Umgang mit Modifikatortasten (Strg, Alt, Umschalt und Win).


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. Desweiteren puffern sie alle physischen Tastatur- oder Mausaktivitäten während des Sendens, um das Vermischen der Benutzereingaben mit den gesendeten Eingaben zu verhindern. Verwende SendMode, um Send zum Synonym für SendInput oder SendPlay zu machen. Um mehr Details über jeden Modus zu erfahren, siehe SendInput und SendPlay.

SendEvent [v1.0.43+]: SendEvent sendet Tastatureingaben mit der gleichen Methode wie der Send-Befehl vor Version 1.0.43. Die Sendegeschwindigkeit von Tastatureingaben wird mit SetKeyDelay bestimmt. Standardmäßig ist Send das Synonym für SendEvent; allerdings kann es via SendMode zum Synonym für SendInput oder SendPlay gemacht werden.

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

   
{F1} - {F24} Funktionstasten. Zum Beispiel: {F12} ist die F12-Taste.
{!} !
{#} #
{+} +
{^} ^
{{} {
{}} }
{Enter} Enter-Taste im Hauptblock
{Escape} oder {Esc} Esc
{Space} Leer (nur für Leerzeichen notwendig, die am Anfang oder Ende der Zeichenkette vorkommen - Leerzeichen in der Mitte können direkt geschrieben sein)
{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). Das Senden von {CapsLock} benötigt möglicherweise vorher SetStoreCapsLockMode Off.
{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 die Strg-Taste gedrückt, bis {Ctrl up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, nutzt man {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 die Alt-Taste gedrückt, bis {Alt up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, nutzt man {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 die Umschalt-Taste gedrückt, bis {Shift up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, nutzt man {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ü-Taste (öffnet das Rechtsklick- oder Kontextmenü)
{Sleep} Sleep-Taste.
{ASC nnnnn}

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

Um Unicode-Zeichen zu generieren, gibt man eine Nummer zwischen 256 und 65535 an (ohne 0 davor). 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 - nnnn ist der hexadezimale Wert des Zeichens ohne 0x-Präfix. 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 Tastenkürzel oder Hotkeys aus.

{vkXX}
{scYYY}
{vkXXscYYY}

Sendet eine Tastatureingabe, die die virtuelle Taste XX und den Scancode YYY hat. Zum Beispiel: Send {vkFFsc159}. Wenn man den sc- oder vk-Bereich weglässt, wird der am besten geeignete Wert an seiner Stelle gesendet.

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

Warnung: Eine solche Kombination von vk und sc ist nur mit Send gültig. Vor [v1.1.27] waren Hotkeys erlaubt, aber alle nicht-hexadezimalen Zeichen nach XX wurden ignoriert.

   
{Numpad0} - {Numpad9} Ziffernblocktasten (wenn Num eingeschaltet ist). Zum Beispiel: {Numpad5} ist 5.
{NumpadDot} , (Komma-Taste im Ziffernblock) (wenn Num eingeschaltet ist)
{NumpadEnter} Enter-Taste im Ziffernblock
{NumpadMult} * (Multiplikationstaste im Ziffernblock)
{NumpadDiv} / (Divisionstaste im Ziffernblock)
{NumpadAdd} + (Additionstaste im Ziffernblock)
{NumpadSub} - (Subtraktionstaste im Ziffernblock)
   
{NumpadDel} Entf-Taste im Ziffernblock (diese und die nachfolgenden Ziffernblocktasten sind nur verwendbar, wenn Num ausgeschaltet ist)
{NumpadIns} Einfg-Taste im Ziffernblock
{NumpadClear} Funktionslose Taste im Ziffernblock (üblicherweise die Taste '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} Gesamtlautstärke stummschalten bzw. Stummschaltung aufheben. Normalerweise das gleiche wie SoundSet, +1, , mute.
{Volume_Down} Gesamtlautstärke leiser machen. Normalerweise das gleiche wie SoundSet, -5.
{Volume_Up} Gesamtlautstä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} PrintScreen
{CtrlBreak} Strg+Untbr
{Pause} PAUSE-Taste
   
{Click [Optionen]}
[v1.0.43+]
Sendet einen Mausklick, das die gleichen Optionen verwendet wie die vom Click-Befehl. Zum Beispiel würde {Click} die linke Maustaste einmal bei der aktuellen Mausposition klicken, und {Click 100, 200} würde auf den Koordinaten 100, 200 klicken (basierend auf CoordMode). Um den Mauszeiger ohne Klicken zu verschieben, gibt man nach den Koordinaten eine 0 an; zum Beispiel: {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 Mausposition (um die Position und weitere Optionen zu kontrollieren, siehe {Click}). 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.
{Blind} Aktiviert den Blind-Modus, der dem Skript mehr Kontrolle gibt, indem er eine Reihe von Dingen deaktiviert, die normalerweise automatisch ausgeführt werden, damit die Dinge wie erwartet funktionieren. Die Zeichenkette {Blind} muss am Anfang der Zeichenkette stehen.
{Raw}
[v1.0.43+]
Aktiviert den Raw-Modus, wodurch die folgenden Zeichen als direkt geschriebener Text interpretiert werden: ^+!#{}. Zwar muss {Raw} nicht am Anfang der Zeichenkette vorkommen, allerdings bleibt es, wenn es einmal angegeben wurde, für den Rest der Zeichenkette aktiv.
{Text}
[v1.1.27+]
Aktiviert den Text-Modus, um eine Kette von Zeichen statt Tastendrücke zu senden. Der Text-Modus bewirkt wie der Raw-Modus, dass die folgenden Zeichen als direkt geschriebener Text interpretiert werden: ^+!#{}. Zwar muss {Text} nicht am Anfang der Zeichenkette vorkommen, allerdings bleibt es, wenn es 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 und die Anzahl an Wiederholungen mit geschweiften Klammern. Zum Beispiel:

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

Halten oder Loslassen: Umschließen Sie den Namen der Taste und das Wort Down oder Up mit 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 Tabulator-Eingaben:

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

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

DownTemp benachrichtigt nachfolgende Send-Befehle, dass die Taste nicht permanent im gedrückten Zustand ist, und dass sie jederzeit losgelassen werden könnte. Zum Beispiel würde Send {Control DownTemp} und dann Send a einen normalen A-Tastendruck erzeugen, nicht einen Strg+A-Tastendruck. Jede Verwendung von Send kann dazu führen, dass der Modifikator permanent losgelassen wird, daher ist DownTemp nicht gerade ideal, um Modifikatortasten neuzubelegen.

[v1.1.27+]: DownR (das "R" bedeutet Remapping bzw. Neubelegen, was dessen Hauptzweck darstellt) teilt nachfolgenden Sendevorgängen mit, dass die Taste, wenn sie automatisch losgelassen wird, nach Beendigung des Sendevorgangs erneut gedrückt werden sollte. Zum Beispiel würde Send {Control DownR} und dann Send a einen normalen A-Tastendruck erzeugen, nicht einen Strg+A-Tastendruck, aber die Strg-Taste im gedrückten Zustand lassen, um sie für Tastaturkürzel zu verwenden. 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 nicht "gedrückt" oder "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, bevor sie gesendet werden, in Tastendrücke umgewandelt. Wenn diese Umwandlung 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 Tastenkürzel 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 eventuell als Zeichen oder als entsprechender virtueller Tastencode (vk41-vk5A) gesendet werden:

Wenn der Buchstabe im aktuellen Tastaturlayout vorhanden ist, wird er immer als Tastencode gesendet, den das Layout mit diesem Buchstaben assoziiert (es sei denn, der Text-Modus wird genutzt, in diesem Fall wird das Zeichen auf andere Weise gesendet). Das heißt, dass der obige Abschnitt nur für nicht-lateinische Layouts wie z. B. Russisch relevant ist.

Modifikatorstatus: Wenn mit Send der Status von Win- oder Alt-Modifikatortasten geändert werden muss (z. B. wenn der Benutzer eine dieser Tasten gedrückt hält), werden eventuell zusätzliche Tastendrücke (standardmäßig Strg) hinzugefügt, um zu verhindern, dass das Startmenü oder das Fenstermenü angezeigt wird. Weitere Informationen finden Sie unter #MenuMaskKey.

BlockInput im Vergleich zu SendInput/SendPlay: Zwar kann man mit dem BlockInput-Befehl verhindern, dass physische Benutzereingaben den simulierten Eingabeverlauf unterbrechen, allerdings sollte man dafür besser SendInput oder SendPlay verwenden. SendInput/Play verhindert im Gegensatz zu BlockInput, dass die eingegebenen Tasten des Benutzers während des Sendens verworfen werden; stattdessen werden solche Tastendrücke zwischengespeichert, um sie anschließend zu senden.

Beim Senden vieler Tastatureingaben kann ein Fortsetzungsbereich hilfreich sein, um den Text besser lesbar und verwaltbar zu machen.

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

Send könnte nicht funktionieren in Windows Vista oder höher, wenn das aktive Fenster mit administrativen Rechten läuft, und das Skript nicht. Das hängt mit dem Sicherheitsmechanismus "User Interface Privilege Isolation" (UIPI) zusammen.

SendInput [v1.0.43+]

SendInput ist in der Regel die bevorzugte Methode, um Tastatureingaben und Mausklicks zu senden, weil sie bedeutend schneller und zuverlässiger ist. In den meisten Fällen wird SendInput die Tastatureingaben sofort senden, selbst bei langen Zeichenketten. Aufgrund dieser Schnelligkeit ist SendInput auch zuverlässiger, weil die Chance geringer ist, dass ein anderes Fenster unerwartet erscheint und die Tastatureingaben abfängt. Die Zuverlässigkeit erhöht sich nochmals durch die Tatsache, dass die Benutzereingaben während eines SendInputs bis zum Schluss zwischengespeichert werden.

Im Gegensatz zu den anderen Sendmethoden ist SendInput auf ca. 5000 Zeichen begrenzt (dieser Grenzwert variiert je nach Version des Betriebssystems und Performance-Einstellungen). Zeichen und Ereignisse oberhalb des Limits 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ückgreift, wird es SetKeyDelay -1, 0 verwenden (wenn aber SendEvent's Tastenverzögerung -1, -1 ist, wird -1, -1 verwendet). Wenn SendInput auf SendPlay zurückgreift, wird es SendPlay's Tastenverzögerung verwenden.

Wenn ein Skript - außer das Skript, das SendInput ausführt - einen systemnahen Tastatur-Hook installiert hat, wird SendInput automatisch auf SendEvent zurückgreifen (oder auf SendPlay, wenn SendMode InputThenPlay wirksam ist). Dieses Verhalten ist notwendig, weil das Vorhandensein eines externen Hooks alle Vorteile von SendInput zunichte machen würde, so dass es sowohl SendPlay als auch SendEvent unterlegen wäre. Da SendInput jedoch einen systemnahen Hook in Programmen außer [AutoHotkey v1.0.43+] nicht erkennen kann, wird es in solchen Fällen nicht auf einen anderen Modus zurückgreifen, wodurch es unzuverlässiger als SendPlay/Event werden würde.

Wenn SendInput einen Mausklick 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. Demzufolge, wenn SendInput absichtlich ein anderes Fenster aktiviert (z. B. mit ALT+TAB), werden die Koordinaten der nachfolgenden Klicks innerhalb des gleichen Befehls falsch sein, weil sie weiterhin relativ zum alten statt zum neuen Fenster sind.

SendPlay [v1.0.43+]

Warnung: SendPlay funktioniert möglicherweise überhaupt nicht, wenn UAC aktiviert ist, selbst wenn das Skript mit Administratorrechten läuft. Weitere Informationen finden Sie in der FAQ.

SendPlay's größter Vorteil ist seine Fähigkeit, Tastatureingaben und Mausklicks bei einer breiteren Auswahl an Spielen "wiedergeben" zu können. Zum Beispiel könnten Hotstrings in einem Spiel nur funktionieren, wenn sie die SendPlay-Option haben.

SendPlay ist, im Gegensatz zu den anderen Sendemethoden, am ungewöhnlichsten, weil dieser Modus selbst keine Tastatureingaben und Mausklicks simuliert. Stattdessen erstellt es eine Reihe von Ereignissen (Meldungen), die direkt in das aktive Fenster einfließen (so ähnlich wie ControlSend, aber auf einem niedrigeren Niveau). Demzufolge kann SendPlay keine Hotkeys oder Hotstrings auslösen.

Wie bei SendInput auch, können sich SendPlay's Tastatureingaben nicht mit den Benutzereingaben vermischen. Wenn der Benutzer also während SendPlay etwas eingibt, werden solche Tastatureingaben bis zum Schluss zwischengespeichert.

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

Die Win-Tasten (LWin und RWin) werden während SendPlay automatisch blockiert, wenn der Tastatur-Hook installiert ist. Dadurch wird verhindert, dass das Startmenü angezeigt wird, wenn der Benutzer versehentlich eine Win-Taste während des Sendens drückt. Alle anderen Tasten außer LWin und RWin müssen nicht blockiert werden, weil das Betriebssystem sie automatisch zwischenspeichert, bis SendPlay durchgeführt wurde (via Puffer).

SendPlay verwendet nicht die Standardeinstellungen von SetKeyDelay und SetMouseDelay. Stattdessen gilt standardmäßig überhaupt keine Verzögerung, das 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 Tastatureingaben werden zu den Fenstern des Skripts gesendet. Selbst dann können Änderungen an den linken/rechten Modifikatortasten (z. B. RControl) nur über ihrem neutralen Gegenstück (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 SendPlay von einem Benutzer unterbrochen werden, indem er Strg+Alt+Entf oder Strg+Esc drückt. Wenn dies geschieht, werden die restlichen Tastatureingaben nicht gesendet, und danach das Skript fortgesetzt, als ob das SendPlay normal abgeschlossen wurde.

Zwar kann SendPlay LWin- und RWin-Ereignisse senden, allerdings werden sie direkt zum aktiven Fenster gesendet, anstatt ihre interne Betriebssystemfunktion durchzuführen. Um das zu umgehen, nutzt man SendEvent. Zum Beispiel würde SendEvent #r das Ausführen-Dialogfenster des Startmenüs anzeigen.

Siehe auch

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

Beispiele

Send Mit freundlichen Grüßen,{enter}Max Mustermann  ; Schreibt eine zweizeilige Signatur.
Send !ds ; Öffnet das Dateimenü und wählt Speichern aus (ALT+D, gefolgt von S).
Send {End}+{Left 4} ; Springt ans Textende und sendet viermal UMSCHALT+NACH-LINKS.
SendInput {Raw}Eine Reihe unberarbeiteter Zeichen, die mit der schnellsten Methode (SendInput) gesendet wurden.