Input

Wartet auf die Eingabe einer Zeichenkette durch den Benutzer.

Input , AusgabeVar, Optionen, EndTasten, VergleichListe

Parameter

AusgabeVar

Name der Ausgabevariable, in der die Benutzereingabe gespeichert werden soll (standardmäßig werden auch künstliche Eingaben erfasst).

Wenn dieser und die anderen Parameter weggelassen werden, wird jede Eingabeerfassung, die in einem anderen Thread aktiv ist, beendet und ErrorLevel auf das Wort NewInput gesetzt. Das ErrorLevel des aktuellen Befehls wird dagegen auf 0 gesetzt, wenn der Befehl eine vorherige Eingabeerfassung beendet hat, oder auf 1, wenn es keine zum Beenden gibt.

In AusgabeVar werden keine Tastendrücke im eigentlichen Sinne gespeichert. Stattdessen werden Zeichen gespeichert, die durch die Tastendrücke erzeugt werden, gemäß der Tastaturbelegung/Sprache des aktiven Fensters. Folglich werden Tastendrücke, die keine Zeichen erzeugen (wie z.B. Bild↑ und Pos1), nicht gespeichert (sie können aber über den EndTasten-Parameter unten erkannt werden).

Hinweis: Esc wird in das ASCII-ESC-Zeichen Chr(27) übersetzt. Dies kann durch Einfügen von {Esc} in EndTasten verhindert werden, aber dann wird die Eingabeerfassung durch Drücken von Esc beendet.

Leerraumzeichen wie z.B. Tab (`t) werden direkt gespeichert. Enter wird als LF-Zeichen (`n) gespeichert.

Optionen

Eine Zeichenkette, die aus beliebig vielen der folgenden Optionen besteht (in beliebiger Reihenfolge, optional durch Leerzeichen getrennt):

B: Backspace wird ignoriert. Normalerweise wird durch Drücken von Backspace während einer Eingabeerfassung das zuletzt gedrückte Zeichen vom Ende der Zeichenkette entfernt. Hinweis: Wenn der Eingabetext sichtbar ist (z.B. in einem Texteditor) und die Pfeiltasten oder andere Mittel zur Navigation innerhalb des Textes verwendet werden, entfernt Backspace weiterhin das letzte Zeichen, nicht das Zeichen nach dem Textcursor (Einfügemarke).

C: Groß-/Kleinschreibung-sensitiv. Normalerweise ist VergleichListe nicht Groß-/Kleinschreibung-sensitiv (in den Versionen vor 1.0.43.03 wurden nur die Groß- und Kleinbuchstaben von A bis Z erkannt, nicht aber Buchstaben wie ü/Ü).

I: Ignoriert Eingaben, die von SendEvent mit einem Sendlevel von 0 erzeugt werden. SendInput und SendPlay werden hingegen immer ignoriert, egal ob diese Einstellung aktiv ist oder nicht. [v1.1.31+]: Direkt nach dem Optionsbuchstaben kann eine Zahl angegeben werden, um den minimalen Sendlevel zu bestimmen. I und I1 sind äquivalent. I0 ist dasselbe wie, als würde die Option fehlen.

L: Längenlimit (z.B. L5). Die maximal erlaubte Länge der Eingabe. Wenn der Text diese Länge erreicht, wird die Eingabeerfassung beendet und ErrorLevel auf das Wort Max gesetzt, es sei denn, der Text stimmt mit einem der Schlüsselwörter in VergleichListe überein, dann wird ErrorLevel auf das Wort Match gesetzt. Wenn diese Option nicht angegeben ist, gilt standardmäßig ein Längenlimit von 16383 Zeichen, was auch der maximal zulässige Wert in Versionen vor [v1.1.31] ist.

M: Modifizierte Tastendrücke wie Strg+A bis Strg+Z werden erkannt und in echte ASCII-Zeichen umgewandelt, falls möglich. Das folgende Beispiel zeigt, wie Strg+C erkannt werden kann:

StrgC := Chr(3) ; Speichert das Zeichen für STRG+C in die Variable StrgC.
Input, AusgabeVar, L1 M
if (AusgabeVar = StrgC)
    MsgBox, Sie haben STRG+C gedrückt.
ExitApp

Hinweis: Strg+A bis Strg+Z sind die Zeichen von Chr(1) bis Chr(26). Durch die M-Option kann es passieren, dass sich einige Tastaturkurzbefehle, wie z.B. Strg+, während einer aktiven Eingabeerfassung falsch verhalten.

T: Zeitlimit (z.B. T3). Die zu wartenden Sekunden, bevor die Eingabeerfassung beendet und ErrorLevel auf das Wort Timeout gesetzt wird. Wenn die Eingabeerfassung das Zeitlimit überschreitet, wird AusgabeVar auf die Zeichenkette gesetzt, die der Benutzer währenddessen eingeben konnte. Es kann eine Floating-Point-Zahl wie z.B. T2.5 angegeben werden.

V: Sichtbar. Normalerweise wird die Eingabe des Benutzers blockiert (unsichtbar für das Betriebssystem gemacht). Verwenden Sie diese Option, damit die Tastendrücke des Benutzers direkt an das aktive Fenster gesendet werden.

*: Platzhalter (überall finden). Normalerweise muss alles, was der Benutzer eingibt, exakt mit einem der Schlüsselwörter in VergleichListe übereinstimmen, um eine Übereinstimmung zu bewirken. Verwenden Sie diese Option, um häufiger eine Übereinstimmung zu finden, indem die gesamte Länge des Eingabetextes durchsucht wird.

E [v1.1.20+]: Einzelzeichen-Endungstasten werden als Zeichencode statt als Tastencode behandelt. Dies ermöglicht konsistentere Ergebnisse, wenn die Tastaturbelegung des aktiven Fensters von der des Skripts abweicht. Dies verhindert auch, dass Tastenkombinationen, die die angegebenen Endungszeichen nicht erzeugen, die Eingabeerfassung beenden; z.B. wird @ als Endungstaste in einer US-Belegung durch Umschalt+2 ausgelöst, aber nicht durch Strg+Umschalt+2 (wenn die E-Option verwendet wird). Wenn zusätzlich noch die C-Option angegeben ist, ist das Endungszeichen Groß-/Kleinschreibung-sensitiv.

EndTasten

Eine Liste beliebig vieler Tasten, von denen jede, wenn gedrückt, zur Beendigung der Eingabeerfassung führt (die Endungstaste selbst wird nicht in AusgabeVar geschrieben). Bei einer auf diese Weise beendeten Eingabeerfassung wird ErrorLevel auf das Wort EndKey gefolgt von einem Doppelpunkt und den Namen der Endungstaste gesetzt. Beispiele: EndKey:., EndKey:Escape.

EndTasten verwendet ein ähnliches Format wie der Send-Befehl. Zum Beispiel würde die Angabe von {Enter}.{Esc} bewirken, dass die Eingabeerfassung durch Enter, . oder Esc beendet wird. Um die geschweiften Klammern als Endungstasten zu verwenden, geben Sie {{} und/oder {}} an.

Um Strg, Alt oder Umschalt als Endungstasten zu verwenden, geben Sie die linke und/oder rechte Version der Taste an, nicht die neutrale Version. Zum Beispiel müssen Sie {LControl}{RControl} anstelle von {Control} angeben.

[v1.0.14+]: Obwohl modifizierte Tasten wie Alt+C (!c) nicht unterstützt werden, können bestimmte Zeichen, die das Gedrückthalten von Umschalt oder AltGr erfordern - insbesondere Satzzeichen wie z.B. ?!:@&{} - verwendet werden. [v1.1.20+]: Andere Zeichen werden mit der oben beschriebenen E-Option unterstützt. Verwendet man sowohl die E- als auch M-Option, werden die modifizierten Tasten von Strg+A bis Strg+Z durch Einfügen der entsprechenden ASCII-Steuerzeichen in EndTasten unterstützt.

Es kann auch explizit ein eindeutiger virtueller Tastencode wie {vkFF} angegeben werden. Tastencodes sind nützlich, um auf Tasten zu verweisen, die keinen Namen haben und beim Drücken kein sichtbares Zeichen erzeugen (selten). Schauen Sie sich die Anleitung am Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

VergleichListe

Eine kommagetrennte Liste von Schlüsselwörtern, von denen jedes zur Beendigung der Eingabeerfassung führt (in diesem Fall wird ErrorLevel auf das Wort Match gesetzt). Alles, was der Benutzer eingibt, muss exakt mit einem der Schlüsselwörter in der Liste übereinstimmen, um eine Übereinstimmung zu bewirken (es sei denn, die *-Option wird verwendet). Alle Leer- und Tabulatorzeichen neben den Kommas sind relevant, d.h. sie sind Teil der Vergleichszeichenkette. Wenn VergleichListe z.B. ABC , XYZ ist, muss der Benutzer ein Leerzeichen nach ABC oder vor XYZ eingeben, damit eine Übereinstimmung erfolgt.

Zwei aufeinanderfolgende Kommas ergeben ein direkt geschriebenes Komma. Zum Beispiel würde das Folgende ein direkt geschriebenes Komma nach dem Wort Zkette1 erzeugen: Zkette1,,,Zkette2. Entsprechend enthält die folgende Liste nur ein einzelnes Element mit einem direkt geschriebenen Komma dazwischen: einzelnes,,Element.

Da die Elemente in VergleichListe nicht als einzelne Parameter behandelt werden, kann die Liste komplett in einer Variable enthalten sein. Tatsächlich muss sie ganz oder teilweise in einer Variable enthalten sein, wenn ihre Länge 16383 Zeichen überschreitet, da dies die maximale Länge einer Skriptzeile ist. Zum Beispiel könnte VergleichListe aus %Liste1%,%Liste2%,%Liste3% bestehen, wobei jede der Variablen eine lange Unterliste von Schlüsselwörtern enthält.

Fehlerbehandlung

[v1.1.04+]: Dieser Befehl ist in der Lage, eine Ausnahme auszulösen, wenn er ohne Parameter aufgerufen wird und wenn keine Eingabeerfassung aktiv ist. Weitere Informationen finden Sie unter Laufzeitfehler.

ErrorLevel wird auf einen der folgenden Werte gesetzt:

Wert Beschreibung

1 oder 0

Jedes Mal, wenn der Befehl ohne Parameter verwendet wird, wird ErrorLevel auf 0 gesetzt, wenn der Befehl eine vorherige Eingabeerfassung beendet, oder auf 1, wenn keine Eingabeerfassung aktiv ist.

NewInput Die Eingabeerfassung wurde von einem anderen Thread unterbrochen, der den Input-Befehl verwendet hat.
Max Die Eingabeerfassung hat die maximal erlaubte Länge erreicht und stimmt mit keinem der Schlüsselwörter in VergleichListe überein.
Timeout Die Eingabeerfassung hat das Zeitlimit überschritten.
Match Die Eingabeerfassung stimmt mit einem der Schlüsselwörter in VergleichListe überein.
EndKey:Name

Eine der Endungstasten in EndTasten wurde gedrückt, um die Eingabeerfassung zu beenden. In diesem Fall enthält ErrorLevel das Wort EndKey, gefolgt von einem Doppelpunkt und den Namen der verantwortlichen Endungstaste ohne geschweifte Klammern, z.B. EndKey:Enter, EndKey:Escape, etc.

Beachten Sie, dass Name der "normalisierte" Name der Taste ist, unabhängig von der Schreibweise in EndTasten. Zum Beispiel bewirkt sowohl {Esc} als auch {vk1B}, dass EndKey:Escape erzeugt wird. Mit GetKeyName() kann der normalisierte Name abgerufen werden.

Wenn die E-Option verwendet wurde, ist Name das tatsächlich eingegebene Zeichen (sofern vorhanden). Andernfalls wird der Tastenname gemäß der aktiven Tastaturbelegung des Skripts ermittelt.

Vor [v1.1.20], wenn der VK-Code der Endungstaste im Bereich von 0x41 (A) bis 0x5A (Z) war, enthielt ErrorLevel üblicherweise das entsprechende ASCII-Zeichen, selbst wenn es für die aktuelle Tastaturbelegung nicht korrekt war. In [v1.1.20+] wird das korrekte Zeichen verwendet. Wenn ein Zeichen im Bereich von A bis Z verwendet wird, ist es aus Gründen der Abwärtskompatibilität großgeschrieben; andernfalls ist es in der Regel kleingeschrieben.

Bemerkungen

Wenn dieser Befehl verwendet wird, während eine Eingabeerfassung in einem anderen Thread aktiv ist, wird diese Eingabeerfassung beendet und ErrorLevel auf das Wort NewInput gesetzt. Danach wird die neue Eingabeerfassung gestartet (sofern Parameter angegeben sind).

Während eine Eingabeerfassung aktiv ist, können neue Threads wie benutzerdefinierte Menüpunkte oder zeitgesteuerte Subroutinen erstellt werden.

Tastatur-Hotkeys funktionieren auch während einer aktiven Eingabeerfassung, können aber nicht ausgelöst werden, wenn eine der erforderlichen Modifikatortasten unterdrückt ist oder wenn der Hotkey die reg-Methode verwendet und seine Suffix-Taste unterdrückt ist. Zum Beispiel könnte der Hotkey ^+a:: durch Input überschrieben werden, während $^+a:: Vorrang vor Input hätte.

Wenn die Eingabeerfassung nicht sichtbar ist, werden alle Tasten unterdrückt, außer reguläre Modifikatortasten, CapsLock, NumLock und ScrollLock. Sogar EndTasten und Tastendrücke, die AusgabeVar nicht verändern, werden unterdrückt. Zum Beispiel hat Pos1 keinen Effekt, während LWin+D das Startmenü öffnet (weil D unterdrückt ist und LWin nicht).

Wenn ein Skript diesen Befehl zum ersten Mal verwendet, wird der Tastatur-Hook installiert (falls noch nicht geschehen). Außerdem wird das Skript persistent; das heißt, dass ExitApp anstelle von Exit verwendet werden sollte, um dieses Skript zu terminieren. Jedes Mal, wenn das Skript einen Suspend- oder Hotkey-Befehl erreicht, wird geprüft, ob der Tastatur-Hook noch von Hotkeys oder Hotstrings beansprucht wird. Ist dies nicht der Fall, wird der Hook wieder deinstalliert.

Bei mehreren Sprachen oder Tastaturbelegungen verwendet Input die Tastaturbelegung des aktiven Fensters, nicht die des Skripts (egal ob die Eingabeerfassung sichtbar ist oder nicht). In den Versionen vor 1.0.44.03 wird die Tastaturbelegung des Skripts verwendet.

Trotz ihrer geringeren Flexibilität sind Hotstrings in der Regel einfacher zu verwenden als der Input-Befehl.

InputHook() ist flexibler als der Input-Befehl.

KeyWait, Hotstrings, InputBox, #InstallKeybdHook, Threads, If Var [not] in/contains VergleichListe

Beispiele

Wartet, bis der Benutzer eine beliebige Taste drückt. Tasten, die keine sichtbaren Zeichen erzeugen (z.B. Modifikatortasten, Funktionstasten und Pfeiltasten), sind als Endungstasten aufgelistet, so dass auch diese erkannt werden.

Input, EinzelTaste, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{CapsLock}{NumLock}{PrintScreen}{Pause}

Dies ist ein funktionierendes Hotkey-Beispiel. Da der Hotkey das Tilde-Präfix (~) hat, wird sein eigener Tastendruck an das aktive Fenster weitergereicht. Wenn Sie also <btw (oder eines der anderen Schlüsselwörter) in einem Texteditor eingeben, wird das Skript automatisch eine Aktion Ihrer Wahl ausführen (z.B. den eingegebenen Text ersetzen). Eine alternative Version dieses Beispiels finden Sie unter Switch.

~<::
Input, BenutzerEingabe, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca
if (ErrorLevel = "Max")
{
    MsgBox, Ihre Eingabe "%BenutzerEingabe%" hat die maximale Textlänge erreicht.
    return
}
if (ErrorLevel = "Timeout")
{
    MsgBox, Sie haben "%BenutzerEingabe%" innerhalb der verfügbaren Zeit eingegeben.
    return
}
if (ErrorLevel = "NewInput")
    return
If InStr(ErrorLevel, "EndKey:")
{
    MsgBox, Sie haben "%BenutzerEingabe%" eingegeben und die Eingabeerfassung mit %ErrorLevel% beendet.
    return
}
; Andernfalls wurde eine Übereinstimmung gefunden.
if (BenutzerEingabe = "btw")
    Send, {backspace 4}by the way
else if (BenutzerEingabe = "otoh")
    Send, {backspace 5}on the other hand
else if (BenutzerEingabe = "fl")
    Send, {backspace 3}Florida
else if (BenutzerEingabe = "ca")
    Send, {backspace 3}California
else if (BenutzerEingabe = "ahk")
    Run, https://www.autohotkey.com
return