Input

Wartet darauf, dass der Benutzer eine Zeichenkette eingibt.

Input , AusgabeVar, Optionen, Endtasten, Vergleichsliste

Parameter

AusgabeVar

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

Fehlen dieser und die anderen Parameter, werden alle laufenden Inputs in den anderen Threads beendet und ErrorLevel auf das Wort NewInput gesetzt. Der ErrorLevel-Wert des aktuellen Befehls wird dagegen auf 0 gesetzt, wenn er einen vorherigen Input beenden konnte, oder auf 1, wenn es keinen vorherigen Input gab, den er beenden konnte.

AusgabeVar wird an sich keine Tastatureingaben enthalten. Stattdessen enthält es Zeichen, die von Tastatureingaben erzeugt werden, abhängig von der Tastaturbelegung/Sprache des aktiven Fensters. Tastatureingaben, die keine Zeichen erzeugen (wie z. B. Bild↑ und Pos1), werden dementsprechend nicht gespeichert (allerdings können sie via Endtasten-Parameter erkannt werden).

Hinweis: Die Esc-Taste wird in das ASCII-ESC-Zeichen Chr(27) umgewandelt. Um das zu verhindern, fügt man {Esc} in Endtasten ein, damit Input durch Drücken von Esc beendet wird.

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

Optionen

Eine Zeichenkette mit null oder mehreren der folgenden Buchstaben (in beliebiger Reihenfolge, optional mit Leerzeichen getrennt):

B: Backspace wird ignoriert. Normalerweise wird, wenn man während eines Inputs Backspace drückt, das zuletzt gedrückte Zeichen am Ende der Zeichenkette entfernt. Hinweis: Ist der Eingabetext sichtbar (wie z. B. in einem Texteditor) und werden die Pfeiltasten oder andere Mittel zum Navigieren innerhalb des Textes verwendet, wird Backspace weiterhin das letzte Zeichen entfernen, anstelle des Zeichens nach der Einfügemarke.

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

I: Ignoriert Eingaben, die vom AutoHotkey-Skript erzeugt werden, wie z. B. durch den SendEvent-Befehl. Allerdings werden SendInput und SendPlay immer ignoriert, egal ob diese Einstellung aktiv ist oder nicht.

L: Längenbegrenzung (z. B. L5). Die maximal erlaubte Länge der Eingabe. Erreicht der Text diese Länge, wird der Input beendet und ErrorLevel auf das Wort Max gesetzt. Wenn der Text stattdessen mit einem Element aus der Vergleichsliste übereinstimmt, wird ErrorLevel auf das Wort Match gesetzt. Fehlt die Zahl, wird die Länge auf 16.383 Zeichen begrenzt (der höchste zulässige Wert).

M: Tastenkombinationen 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:

Transform, 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). Außerdem ist es möglich, dass die M-Option einige Tastenkürzel wie Strg+ dazu bringen kann, sich während eines Inputs falsch zu verhalten.

T: Zeitlimit (z. B. T3). Die Anzahl an Sekunden, die gewartet werden sollen, bevor der Input beendet und ErrorLevel auf das Wort Timeout gesetzt wird. Hat der Input die Zeit überschritten, wird AusgabeVar auf das gesetzt, was auch immer der Benutzer gerade eingegeben hat. Dieser Wert kann eine Floating-Point-Zahl wie z. B. 2.5 sein.

V: Sichtbar. Normalerweise wird die Eingabe des Benutzers blockiert (unsichtbar für das Betriebssystem). Verwenden Sie diese Option, um die Tastatureingaben des Benutzers direkt an das aktive Fenster senden zu lassen.

*: Platzhalter (überall finden). Normalerweise muss alles, was der Benutzer eingibt, exakt mit einem Element aus der Vergleichsliste übereinstimmen, damit der Input fortfahren kann. Verwenden Sie diese Option, um im gesamten Eingabetext eine Übereinstimmung häufiger finden zu können.

E [v1.1.20+]: Behandelt Einzelzeichen-Endungstasten als Zeichencode anstatt als Tastencode. Diese Änderung ermöglicht konsistentere Ergebnisse, wenn das Tastaturlayout des aktiven Fensters sich vom Tastaturlayout des Skripts unterscheidet. Es verhindert auch Tastenkombinationen, die die angegebenen Endungszeichen bei der Eingabe eigentlich nicht erzeugen können; wenn @ beispielsweise eine Endungstaste wäre, würde sie auf einem US-Layout via Umschalt+2 ausgelöst werden, aber nicht via Strg+Umschalt+2 (wenn die E-Option verwendet wird). Wenn zusätzlich noch die C-Option angegeben ist, unterscheidet das Endungszeichen zwischen Groß- und Kleinschreibung.

Endtasten

Eine Liste mit null oder mehreren Tasten, die den Input beenden können, sobald eine von denen gedrückt wird (die Endtaste selbst wird nicht in AusgabeVar geschrieben). Ein auf diese Weise beendeter Input setzt ErrorLevel auf das Wort EndKey, gefolgt von einem Doppelpunkt und den Namen der Endtaste. Beispiele: EndKey:., EndKey:Escape.

Die Endtasten-Liste verwendet ein Format, das Ähnlichkeit zum verwendeten Format im Send-Befehl hat. Zum Beispiel würde {Enter}.{Esc} bewirken, dass Enter, . oder Esc den Input beenden können. Damit die geschweiften Klammern selbst Endtasten sein können, gibt man {{} und/oder {}} an.

Um Strg, Alt oder Umschalt als Endtasten zu verwenden, gibt man die linke und/oder rechte Version der Taste an, nicht die neutrale Version. Zum Beispiel müsste {LControl}{RControl} anstelle von {Control} angegeben werden.

[v1.0.14+]: Zwar werden Tastenkombinationen wie Alt+C (!c) nicht unterstützt, allerdings können bestimmte Zeichen, die eine gedrückte Umschalt-Taste erfordern - also Satzzeichen wie z. B. ?!:@&{} - verwendet werden. [v1.1.20+]: Andere Zeichen in Verbindung mit der oben beschriebenen E-Option werden unterstützt. Wenn sowohl die E- als auch M-Option vorhanden sind, werden Tastenkombinationen von Strg+A bis Strg+Z unterstützt, indem man die entsprechenden ASCII-Steuerzeichen in Endtasten einfügt.

Ein eindeutiger virtueller Tastencode wie {vkFF} könnte man auch angeben. Diese Angabe ist in Ausnahmefällen nützlich, wo eine Taste keinen Namen hat und keine sichtbaren Zeichen beim Drücken erzeugt. Der virtuelle Tastencode einer solchen Taste kann durch Befolgen der Schritte am unteren Ende der Tastenliste ermittelt werden.

Vergleichsliste

Eine kommagetrennte Liste mit Stichwörtern, die den Input beenden können (in diesem Fall wird ErrorLevel auf das Wort Match gesetzt). Alles, was der Benutzer eingibt, muss exakt mit einem Element aus der Liste übereinstimmen, damit der Input fortfahren kann (sofern die *-Option nicht vorhanden ist). Alle Leer- und Tabulatorzeichen an den angrenzenden Kommas sind von Bedeutung - das heißt, dass sie ein Teil der Übereinstimmungszeichenkette sind. Wenn Vergleichsliste beispielsweise ABC , XYZ wäre, kann eine Übereinstimmung nur erfolgen, wenn der Benutzer ein Leerzeichen nach ABC oder vor XYZ eingibt.

Zwei aufeinanderfolgende Kommas ergeben ein direkt geschriebenes Komma. Zum Beispiel würde die folgende Zeile ein direkt geschriebenes Komma nach dem Wort Zeichenkette1 erzeugen: Zeichenkette1,,,Zeichenkette2. Im Vergleich dazu würde die folgende Liste nur ein einzelnes Element mit einem direkt geschriebenen Komma dazwischen enthalten: einzelnes,,Element.

Da die Elemente in Vergleichsliste nicht als einzelne Parameter behandelt werden, kann die Liste komplett in einer Variable enthalten sein. Diese Methode ist sowieso notwendig, wenn die Liste eine Länge von 16.383 Zeichen überschreitet (die maximale Länge einer Skriptzeile). Zum Beispiel könnte Vergleichsliste aus %Liste1%,%Liste2%,%Liste3% bestehen, von der jede Unterliste eine lange Liste mit Elementen enthält.

ErrorLevel

[v1.1.04+]: Dieser Befehl ist in der Lage, eine Ausnahme auszulösen, wenn er ohne Parameter aufgerufen wird, oder wenn kein Input am Laufen ist. Weitere Informationen finden Sie unter Laufzeitfehler.

1 oder 0

Immer wenn der Befehl ohne Parameter erfolgt, wird ErrorLevel auf 0 gesetzt, wenn er erfolgreich einen vorherigen Input beenden konnte, oder auf 1, wenn es keinen vorherigen Input gab, den er beenden konnte.

NewInput Der Input wurde durch einen anderen Thread unterbrochen, der den Input-Befehl benutzte.
Max Der Input hat die maximal erlaubte Länge erreicht und stimmt mit keinem Element aus der Vergleichsliste überein.
Timeout Der Input hat die Zeit überschritten.
Match Der Input stimmt mit einem Element aus der Vergleichsliste überein.
EndKey:Name

Eine der Endtasten wurde zum Beenden des Inputs gedrückt. In diesem Fall wird ErrorLevel auf das Wort EndKey gesetzt, gefolgt von einem Doppelpunkt und den Namen der Endtaste ohne geschweifte Klammern, z. B. EndKey:Enter, EndKey:Escape, etc.

Beachten Sie, dass Name der "normalisierte" Name der Taste ist, egal wie sie in Endtasten geschrieben wurde. Zum Beispiel würde sowohl {Esc} als auch {vk1B} EndKey:Escape erzeugen. Mit GetKeyName() kann der normalisierte Name abgerufen werden.

Wenn die E-Option verwendet wurde, wird Name das aktuell eingegebene Zeichen sein (falls zutreffend). Ansonsten wird der Name auf Basis des aktiven Tastaturlayouts vom Skript bestimmt.

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 nicht für das aktuelle Tastaturlayout korrekt war. In [v1.1.20] und höher wird das korrekte Zeichen verwendet. Verwendet man ein Zeichen im Bereich von A bis Z, wird es aus Gründen der Rückwärtskompatibilität großgeschrieben sein; ansonsten in der Regel kleingeschrieben.

Bemerkungen

Verwendet man diesen Befehl, während ein Input in einem anderen Thread bereits am Laufen ist, wird dieser Input beendet und ErrorLevel auf das Wort NewInput gesetzt. Danach wird ein neuer Input eingeleitet (sofern Parameter angegeben sind).

Während ein Input am Laufen ist, können neue Threads wie benutzerdefinierte Menüelemente oder zeitgesteuerte Subroutinen erstellt werden. Zudem sind Tastatur-Hotkeys auch dann noch aktiv, wenn der Input sichtbar ist. Wenn der Input nicht sichtbar ist, können nur Hook-Hotkeys ausgelöst werden.

Wenn ein Skript diesen Befehl zum ersten Mal verwendet, wird der Tastatur-Hook installiert (falls noch nicht geschehen). Darüber hinaus wird das Skript persistent; das heißt, dass das Skript nur noch mit ExitApp beendet werden kann. Jedes Mal, wenn das Skript einen Suspend- oder Hotkey-Befehl erreicht, wird überprüft, ob der Tastatur-Hook noch von Hotkeys oder Hotstrings beansprucht wird. Ist dies nicht der Fall, wird der Hook wieder deinstalliert.

Verwenden Sie mehrere Sprachen oder Tastaturbelegungen, greift der Input auf die Tastaturbelegung des aktiven Fensters zurück, anstatt auf die des Skripts (egal ob die Eingabe sichtbar ist oder nicht). In den Versionen vor 1.0.44.03 wurde die Belegung des Skripts verwendet.

Zwar sind Hotstrings nicht so flexibel wie ein Input-Befehl, allerdings sind sie leichter zu handhaben.

Siehe auch

KeyWait, Hotstrings, InputBox, #InstallKeybdHook, Threads, if Var in/contains Vergleichsliste

Beispiele

; Wartet darauf, dass der Benutzer eine Taste drückt.  Tasten, die keine sichtbaren Zeichen erzeugen (z. B.
; Modifikatortasten, Funktionstasten, Pfeiltasten), sind als Endtasten aufgelistet, so dass auch
; sie erkannt werden können.
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 den Tilde-Präfix (~) hat,
; wird seine Tastatureingabe selbst an das aktive Fenster übergeben.
; Schreibt man daher [btw (oder einen anderen
; Begriff) in ein Texteditor, wird das Skript automatisch eine Aktion
; Ihrer Wahl durchführen (z. B. den Eingabetext ersetzen):

~[::
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 Eingabe mit %ErrorLevel% beendet.
    return
}
; Ansonsten 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://autohotkey.com
return