Send / SendText / SendInput / SendPlay / SendEvent

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

Send Tasten
SendText Tasten
SendInput Tasten
SendPlay Tasten
SendEvent Tasten

Parameter

Tasten

Typ: Zeichenkette

Eine Sequenz von Tasten, die gesendet werden sollen.

Standardmäßig (also wenn weder SendText 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 wirken sich nur auf die jeweils nächste Taste aus. 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 E

Hinweis: Da durch Senden von Umschalt Großbuchstaben 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 verwendet, um Tastennamen und andere Optionen zu umschließen und um die spezielle Bedeutung einiger Zeichen außer Kraft zu setzen. Zum Beispiel wird {Tab} Tab drücken und {!} ein normales Ausrufezeichen senden.

Wenn ein reiner ASCII-Buchstabe (a-z oder A-Z) mit geschweiften Klammern umschlossen wird, ist Send gezwungen, den Buchstaben als virtuellen Tastencode zu senden, egal ob das Zeichen in der aktuellen Tastaturbelegung existiert oder nicht. Mit anderen Worten, Send "a" erzeugt den Buchstaben "a", während Send "{a}" vielleicht je nach Tastaturbelegung den Buchstaben "a" erzeugt. Einzelheiten finden Sie unter Bemerkungen.

Send-Varianten

Send: Standardmäßig ist Send synonym mit SendInput, kann aber via SendMode synonym mit SendEvent oder SendPlay gemacht werden.

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

SendInput und SendPlay: SendInput und SendPlay verwenden die gleiche Syntax wie Send, sind aber in der Regel schneller und zuverlässiger. Außerdem puffern sie alle physischen Tastatur- und Mausaktionen des Benutzers während des Sendens, um zu verhindern, dass die Tastendrücke des Benutzers mit den Gesendeten vermischt werden. SendMode kann verwendet werden, um Send synonym mit SendInput oder SendPlay zu machen. Weitere Informationen zu den einzelnen Modi finden Sie unter SendInput und SendPlay weiter unten.

SendEvent: SendEvent verwendet zum Senden von Tastendrücken die keybd_event-Funktion von Windows (siehe Microsoft Docs für Details). Die Geschwindigkeit, mit der die Tastendrücke gesendet werden, wird durch SetKeyDelay beeinflusst. SendMode kann verwendet werden, um Send synonym mit SendEvent oder SendPlay zu machen.

Spezielle Modi

Die folgenden Modi beeinflussen die Interpretation der Zeichen in Tasten oder das Verhalten von Funktionen, 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} aktiviert werden und interpretiert alle nachfolgenden Zeichen einschließlich ^+!#{} als direkt geschriebenen Text, anstatt {Enter} in Enter, ^c in Strg+C usw. zu übersetzen. Zum Beispiel bewirkt Send "{Raw}{Tab}", dass {Tab} statt Tab gesendet wird.

Der Raw-Modus hat keinen Einfluss auf die Interpretation von Escapesequenzen und Ausdrücken. Zum Beispiel bewirkt Send "{Raw}``100`%", dass die Zeichenkette `100% gesendet wird.

Text-Modus

Der Text-Modus kann entweder mit {Text}, SendText oder ControlSendText aktiviert werden und bewirkt dasselbe wie der Raw-Modus, allerdings ohne den Versuch, Zeichen (außer `r, `n, `t und `b) in Tastencodes umzuwandeln; stattdessen wird für alle übrigen Zeichen die Fallback-Methode angewendet. Dies 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 erfordern jedoch, dass Modifikatortasten losgelassen werden.

`n, `r und `r`n werden in einen einzelnen Enter-Tastendruck übersetzt, 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.

Wie der Blind-Modus ignoriert auch der Text-Modus SetStoreCapsLockMode (d.h. der Status von Feststell bleibt unverändert) und wartet nicht auf das Loslassen von Win. Der Grund dafür ist, dass der Text-Modus in der Regel nicht vom Status von Feststell 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 und gibt dem Skript mehr Kontrolle, 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 die folgenden Auswirkungen:

Nach dem Wort "Blind" können ein oder mehrere Modifikatorsymbole (!#^+) folgen, damit diese Modifikatoren bei Bedarf automatisch losgelassen werden können. Zum Beispiel bewirkt *^a::Send "{Blind^}b", dass Umschalt+B statt Strg+Umschalt+B gesendet wird, wenn Strg+Umschalt+A gedrückt wurde. {Blind!#^+} erlaubt das Loslassen aller Modifikatoren bei Bedarf, aktiviert aber auch die anderen Effekte des Blind-Modus.

AutoHotkey verwendet automatisch den Blind-Modus beim Neubelegen einer Taste. Zum Beispiel würde die Neubelegung a::b Folgendes erzeugen: 1) "b", wenn "a" eingegeben wird; 2) großes "B", wenn ein großes "A" eingegeben wird; und 3) Strg+B, wenn Strg+A eingegeben wird. Wenn Modifikatoren bei der Originaltaste angegeben sind (einschließlich Umschalt, wenn die Originaltaste ein Großbuchstabe ist), werden diese wie oben beschrieben ausgeschlossen. Zum Beispiel erzeugt ^a::b ein normales B, kein Strg+B.

{Blind} wird nicht von SendText und ControlSendText unterstützt; verwenden Sie stattdessen {Blind}{Text}.

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

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 (wird nur für Leerzeichen am Anfang oder Ende der zu sendenden Zeichenkette benötigt - Leerzeichen in der Mitte 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 (SetCapsLockState ist zuverlässiger). Zum Senden von {CapsLock} ist möglicherweise vorher SetStoreCapsLockMode False 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 die linke virtuelle Taste, nicht die neutrale)
{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, ersetzen Sie Ctrl mit LCtrl oder RCtrl.
{Alt} Alt (technische Info: Sendet die neutrale virtuelle Taste, aber den linken Scancode)
{LAlt} Linke Alt-Taste (technische Info: Sendet die linke virtuelle Taste, nicht die neutrale)
{RAlt} Rechte Alt-Taste (oder AltGr je nach Tastaturbelegung)
{Alt down} Hält Alt gedrückt, bis {Alt up} gesendet wird. Um stattdessen die linke oder rechte Taste gedrückt zu halten, ersetzen Sie Alt mit LAlt oder RAlt.
{Shift} Umschalt (technische Info: Sendet die neutrale virtuelle Taste, aber den linken Scancode)
{LShift} Linke Umschalt-Taste (technische Info: Sendet die linke virtuelle Taste, nicht die neutrale)
{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, ersetzen Sie Shift mit LShift oder RShift.
{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 die Erzeugung von Sonderzeichen, die auf der Tastatur nicht existieren. Um sichtbare ASCII-Zeichen oder andere Zeichen aus der Codepage 437 zu erzeugen, geben Sie eine Zahl zwischen 1 und 255 an. Um ANSI-Zeichen zu erzeugen (Standard in den meisten Sprachen), geben Sie eine Zahl zwischen 128 und 255 an, aber stellen Sie ihr eine Null voran, z.B. {Asc 0133}.

Um Unicode-Zeichen zu erzeugen, geben Sie eine Zahl zwischen 256 und 65535 an (ohne Null am Anfang). Dies wird jedoch nicht von allen Anwendungen unterstützt. Alternativen finden Sie im nächsten Abschnitt.

{U+nnnn}

Sendet ein Unicode-Zeichen, wobei nnnn der Hexadezimalwert des Zeichens ohne 0x-Präfix ist. Dies wird normalerweise nicht benötigt, da Send und ControlSend automatisch Unicode-Text unterstützen.

Zum Senden des Zeichens wird SendInput() oder WM_CHAR verwendet. Außerdem hat der aktuelle Send-Modus keinen Effekt. Derart gesendete Zeichen lösen in der Regel keine Tastaturkurzbefehle oder Hotkeys aus.

{vkXX}
{scYYY}
{vkXXscYYY}

Sendet einen Tastendruck mit dem virtuellen Tastencode XX und dem Scancode YYY. Zum Beispiel: Send "{vkFFsc159}". Wenn der sc- oder vk-Teil weggelassen wird, wird stattdessen der am besten passende 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: Die Kombination von vk und sc auf diese Weise ist nur mit Send gültig.

{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 folgenden 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} Master-Lautstärke stummschalten bzw. Stummschaltung aufheben. Standardmäßig äquivalent zu SoundSetMute -1.
{Volume_Down} Master-Lautstärke verringern. Standardmäßig äquivalent zu SoundSetVolume -5.
{Volume_Up} Master-Lautstärke erhöhen. Standardmäßig äquivalent zu SoundSetVolume "+5".
{Media_Next} Media Player "Nächster Titel"
{Media_Prev} Media Player "Vorheriger Titel"
{Media_Stop} Media Player "Stopp"
{Media_Play_Pause} Media Player "Wiedergabe/Anhalten"
{Launch_Mail} E-Mail-Programm starten
{Launch_Media} Media Player starten
{Launch_App1} Benutzerdefiniertes Programm 1 starten
{Launch_App2} Benutzerdefiniertes Programm 2 starten
{PrintScreen} Druck
{CtrlBreak} Strg+Pause
{Pause} Pause
{Click [Optionen]} Sendet einen Mausklick mit denselben Optionen wie die Click-Funktion. Zum Beispiel bewirkt Send "{Click}", dass einmal mit der linken Maustaste auf die aktuelle Position des Mauszeigers geklickt wird, oder Send "{Click 100 200}", dass auf die Koordinaten 100, 200 geklickt wird (gemäß CoordMode). Um den Mauszeiger ohne Klicken zu bewegen, geben Sie 0 nach den Koordinaten an, z.B. Send "{Click 100 200 0}". Die Verzögerung zwischen den Mausklicks wird durch SetMouseDelay (nicht SetKeyDelay) bestimmt.
{WheelDown}, {WheelUp}, {WheelLeft}, {WheelRight}, {LButton}, {RButton}, {MButton}, {XButton1}, {XButton2}

Sendet ein Maustastenereignis an die aktuelle Position des Mauszeigers (um Kontrolle über die Position und andere Optionen zu haben, verwenden Sie {Click} oben). Die Verzögerung zwischen den Mausklicks wird durch SetMouseDelay bestimmt.

LButton ist die primäre Maustaste und RButton die sekundäre Maustaste. Normalerweise befindet sich die primäre Maustaste (LButton) auf der linken Seite, aber der Benutzer kann die Maustasten über die Systemsteuerung vertauschen.

{Blind} Aktiviert den Blind-Modus, der dem Skript mehr Kontrolle gibt, indem eine Reihe von Dingen deaktiviert werden, die normalerweise automatisch vorgenommen werden, damit die Dinge wie erwartet funktionieren. {Blind} muss am Anfang der Zeichenkette stehen.
{Raw} Aktiviert den Raw-Modus, der dafür sorgt, dass die folgenden Zeichen als direkt geschriebener Text interpretiert werden: ^+!#{}. Obwohl {Raw} nicht am Anfang der Zeichenkette stehen muss, bleibt sie, wenn sie einmal angegeben wurde, für den Rest der Zeichenkette aktiv.
{Text} Aktiviert den Text-Modus, der eine Kette von Zeichen anstelle von Tastendrücken sendet. Wie der Raw-Modus bewirkt der Text-Modus, dass die folgenden Zeichen als direkt geschriebener Text interpretiert werden: ^+!#{}. Obwohl {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: Geben Sie in geschweiften Klammern den Namen der Taste und die Anzahl der Wiederholungen an. 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: Geben Sie in geschweiften Klammern den Namen der Taste und das Wort Down oder Up an. 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 obigen Methode gedrückt gehalten wird, wird sie nicht automatisch wiederholt, wie es beim physischen Gedrückthalten der Fall wäre (da Autowiederholung ein Treiber/Hardware-Feature ist). Es kann jedoch eine Schleife verwendet werden, um eine Autowiederholung zu simulieren. Das folgende Beispiel sendet 20 Tabulatortastendrücke:

Loop 20
{
    Send "{Tab down}"  ; Autowiederholung besteht aus fortlaufenden Down-Ereignissen (ohne Up-Ereignisse).
    Sleep 30  ; Verzögerung in Millisekunden zwischen den Tastendrücken (oder SetKeyDelay verwenden).
}
Send "{Tab up}"  ; Taste loslassen.

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. Zum Beispiel kann sich Send "a" ähnlich wie Send "{Blind}{Ctrl up}a{Ctrl down}" verhalten, wenn der Benutzer Strg physisch gedrückt hält, während Send "{Ctrl Down}" gefolgt von Send "a" bewirkt, dass Strg+A erzeugt wird. DownTemp und DownR können verwendet 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 dauerhaft unten ist und jederzeit losgelassen werden kann, wenn ein Tastendruck dies erfordert. Zum Beispiel würde Send "{Control DownTemp}", später gefolgt von Send "a", A erzeugen, nicht Strg+A. Jede Verwendung von Send kann dazu führen, dass der Modifikator dauerhaft losgelassen wird, daher ist DownTemp nicht unbedingt für die Neubelegung von Modifikatortasten geeignet.

DownR (das "R" steht für Remapping bzw. Neubelegung, 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. Zum Beispiel würde Send "{Control DownR}", später gefolgt von Send "a", A erzeugen, nicht Strg+A, aber Strg für eventuelle Tastaturkurzbefehle gedrückt lassen. Mit anderen Worten, DownR hat denselben Effekt wie, als würde man die Taste physisch drücken.

Wenn ein Zeichen nicht zu einer virtuellen Taste in der aktuellen Tastaturbelegung gehört, kann es weder "gedrückt" noch "losgelassen" werden. Zum Beispiel hat Send "{µ up}" bei die meisten Belegungen keinen Effekt, während Send "{µ down}" äquivalent zu 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 die aktuelle Tastaturbelegung keine Taste oder Tastenkombination enthält, die das Zeichen erzeugen würde), wird das Zeichen mit 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.

Jedes Zeichen im Bereich von a-z oder A-Z (reine ASCII-Buchstaben), das nicht in der aktuellen Tastaturbelegung existiert, kann entweder als Zeichen oder als entsprechender virtueller Tastencode (vk41-vk5A) gesendet werden:

Wenn der Buchstabe in der aktuellen Tastaturbelegung existiert, wird er als Tastencode gesendet, den die Belegung mit diesem Buchstaben assoziiert (es sei denn, der Text-Modus wird verwendet, dann wird das Zeichen auf andere Weise gesendet). Mit anderen Worten, der obige Abschnitt ist nur für nicht-lateinbasierte Belegungen 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 injizieren (standardmäßig Strg), um zu verhindern, dass das Startmenü oder das Fenstermenü angezeigt wird. Weitere Informationen finden Sie unter A_MenuMaskKey.

BlockInput vs. SendInput/SendPlay: Obwohl die BlockInput-Funktion verhindern kann, dass physische Tastendrücke den Fluss von simulierten Tastendrücken unterbrechen, ist es oft besser, SendInput oder SendPlay zu verwenden, damit Tastendrücke und Mausklicks nicht unterbrochen werden können. SendInput/Play verhindert im Gegensatz zu BlockInput, dass die Tastendrücke des Benutzers während des Sendens verworfen werden; stattdessen werden solche Tastendrücke gepuffert und danach 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, wenn das aktive Fenster mit Adminrechten ausgeführt wird und das Skript nicht. Dies ist auf einen Sicherheitsmechanismus namens Benutzeroberflächen-Rechteisolierung (engl. User Interface Privilege Isolation, kurz UIPI) zurückzuführen.

SendInput

SendInput ist in der Regel die bevorzugte Methode zum Senden von Tastendrücken und Mausklicks, da sie schneller und zuverlässiger ist als die anderen Methoden. In den meisten Fällen ist SendInput nahezu verzögerungsfrei, sogar wenn lange Zeichenketten gesendet werden. Durch diese Schnelligkeit ist SendInput auch zuverlässiger, da das Risiko verringert wird, dass unerwartet ein anderes Fenster erscheint und die Tastendrücke abfängt. Die Zuverlässigkeit wird noch weiter verbessert durch die Tatsache, dass alles, was der Benutzer während eines SendInputs eingibt, bis zu dessen Abschluss nach hinten verschoben wird.

Im Gegensatz zu den anderen Send-Modi ist SendInput auf ca. 5000 Zeichen begrenzt (dies kann je nach Systemversion und Performanzeinstellungen variieren). Zeichen und Ereignisse oberhalb dieser Grenze werden nicht gesendet.

Hinweis: SendInput ignoriert SetKeyDelay, da das Betriebssystem in diesem Modus keine Verzögerung unterstützt. Wenn SendInput jedoch wegen der unten beschriebenen Bedingungen auf SendEvent zurückfällt, verwendet es SetKeyDelay -1, 0 (es sei denn, die Tastenverzögerung von SendEvent ist -1, -1, dann wird -1, -1 verwendet). Wenn SendInput auf SendPlay zurückfällt, verwendet es die Tastenverzögerung von SendPlay.

Wenn das Skript einen Low-Level-Tastatur-Hook installiert hat, deinstalliert SendInput ihn automatisch vor der Ausführung und installiert ihn danach wieder. Folglich ist SendInput in der Regel nicht in der Lage, die Hook-Hotkeys oder InputHooks des Skripts auszulösen. Der Hook wird temporär deinstalliert, da seine Existenz sonst alle Vorteile von SendInput zunichtemachen würde und somit sowohl SendPlay als auch SendEvent unterlegen wäre. Dies wird jedoch nur für den Hook des Skripts gemacht, nicht aber, wenn ein externer Hook erkannt wird, wie unten beschrieben.

Wenn ein anderes Skript als das Skript, das SendInput ausführt, einen Low-Level-Tastatur-Hook installiert hat, fällt SendInput automatisch auf SendEvent zurück (oder auf SendPlay, wenn SendMode "InputThenPlay" aktiv ist). Dies geschieht, weil das Vorhandensein eines externen Hooks alle Vorteile von SendInput außer Kraft setzt, wodurch es sowohl SendPlay als auch SendEvent unterlegen ist. Da SendInput jedoch nicht in der Lage ist, einen Low-Level-Hook in anderen Programmen als AutoHotkey v1.0.43+ zu erkennen, fällt es in solchen Fällen nicht zurück, wodurch es weniger zuverlässig ist als SendPlay/Event.

Wenn SendInput Mausklicks mit Mitteln wie {Click} sendet, während CoordMode "Mouse", "Window" oder CoordMode "Mouse", "Client" aktiv ist, wird jeder Klick relativ zum Fenster sein, das zu Beginn des Sendens aktiv war. Wenn SendInput also absichtlich ein anderes Fenster aktiviert (z.B. mit ALT+TAB), werden die Koordinaten der nachfolgenden Klicks innerhalb derselben Funktion falsch sein, wenn sie relativ zum neuen statt zum alten Fenster sein sollten.

SendPlay

Warnung: SendPlay funktioniert möglicherweise nicht, wenn die Benutzerkontensteuerung (engl. User Account Control, kurz UAC) aktiviert ist, auch wenn das Skript als Administrator ausgeführt wird. Weitere Informationen finden Sie in der FAQ.

SendPlay hat gegenüber den anderen Modi den großen Vorteil, dass es Tastendrücke und Mausklicks in einer breiteren Palette von Videospielen "wiedergeben" kann. Zum Beispiel könnte ein bestimmtes Videospiel nur Hotstrings mit der SendPlay-Option akzeptieren.

Von den drei Send-Modi ist SendPlay der ungewöhnlichste, da er an sich keine Tastendrücke und Mausklicks simuliert. Stattdessen erstellt dieser Modus eine Sequenz von Ereignissen (Meldungen), die direkt in das aktive Fenster einfließen (ähnlich wie ControlSend, aber auf einer niedrigeren Ebene). Folglich löst SendPlay keine Hotkeys oder Hotstrings aus.

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 diese Tastendrücke bis zu dessen Abschluss nach hinten verschoben.

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

Beide Win-Tasten (LWin und RWin) werden während eines SendPlays automatisch blockiert, wenn der Tastatur-Hook installiert ist. Dies 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, da das Betriebssystem diese automatisch bis zum Abschluss von SendPlay nach hinten verschiebt (via Pufferung).

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

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

SendPlay kann Feststell, Num oder Rollen weder ein- noch ausschalten. Ebenso ist es nicht in der Lage, den von GetKeyState gesehenen Status einer Taste zu ä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. Darüber hinaus gelten für SendPlay noch weitere Einschränkungen, die auf der SendMode-Seite beschrieben sind.

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

Obwohl SendPlay LWin- und RWin-Ereignisse senden kann, werden diese direkt an das aktive Fenster gesendet, anstatt ihre native Systemfunktion auszuführen. Um das zu umgehen, verwenden Sie SendEvent. Zum Beispiel bewirkt SendEvent "#r", dass das Ausführen-Dialogfenster des Startmenüs angezeigt wird.

SendMode, SetKeyDelay, SetStoreCapsLockMode, Escapesequenzen (z.B. `n), 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 zum Ende des Textes und sendet viermal UMSCHALT+NACH-LINKS.

Send "{End}+{Left 4}"

Sendet eine lange Sequenz von Rohzeichen mit der schnellsten Methode.

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

Hält eine Taste gedrückt, die in einer Variable enthalten ist.

MeineTaste := "Shift"
Send "{" MeineTaste " down}"  ; Hält die Umschalttaste gedrückt.