KeyWait

Wartet, bis eine Tastatur-, Maus- oder Controllertaste losgelassen oder nach unten gedrückt wird.

KeyWait TasteName , Optionen

Parameter

TasteName

Typ: Zeichenkette

Nahezu jedes Zeichen, das mit der Tastatur erzeugt werden kann, oder einer der Tastennamen aus der Tastenliste, einschließlich Maus- und Controllertasten. Andere Controllerwerte werden nicht unterstützt.

Es kann auch explizit ein eindeutiger virtueller Tastencode wie vkFF angegeben werden. Dies ist nützlich für den seltenen Fall, dass eine Taste keinen Namen hat und beim Drücken kein sichtbares Zeichen erzeugt. Schauen Sie sich die Anleitung am Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

Optionen

Typ: Zeichenkette

Wenn leer oder weggelassen, wird die Funktion solange warten, bis der Benutzer die angegebene Tastatur-, Maus- oder Controllertaste physisch loslässt. Wenn aber der Tastatur-Hook nicht installiert ist und TasteName eine Tastaturtaste ist, die künstlich losgelassen wurde (z.B. via Send-Funktion), wird die Taste so behandelt, als wäre sie physisch losgelassen worden. Dasselbe gilt für Maustasten, wenn der Maus-Hook nicht installiert ist.

Andernfalls geben Sie eine Zeichenkette an, die aus einer oder mehreren der folgenden Optionen besteht (in beliebiger Reihenfolge, optional durch Leerzeichen getrennt):

D: Warten, bis die Taste nach unten gedrückt wird.

L: Prüft den logischen Status der Taste; das ist der Status, den das Betriebssystem und das aktive Fenster für diese Taste vermuten, der aber nicht unbedingt dem physischen Status entspricht. Diese Option wird bei Controllertasten ignoriert.

T: Zeitlimit (z.B. T3). Die zu wartenden Sekunden, bevor eine Zeitüberschreitung erfolgt und 0 zurückgegeben wird. Die Funktion hört bereits auf zu warten, wenn die Taste den angegebenen Status erreicht hat, und nicht erst, wenn das Zeitlimit abgelaufen ist. In diesem Fall gibt die Funktion sofort 1 zurück.

Der Zeitlimit-Wert kann eine Floating-Point-Zahl wie 2.5 sein, aber kein Hexadezimalwert wie 0x03.

Rückgabewert

Typ: Integer (boolesch)

Diese Funktion gibt 0 (false) zurück, wenn die Funktion das Zeitlimit überschritten hat, andernfalls 1 (true).

Bemerkungen

Der physische Status einer Tastatur- oder Maustaste ist in der Regel derselbe wie der logische Status, es sei denn, der Tastatur- und/oder Maus-Hook ist installiert, dann spiegelt dieser genau wider, ob der Benutzer die Taste physisch gedrückt hält oder nicht. Mit der KeyHistory-Funktion oder dem zugehörigen Menüpunkt können Sie prüfen, ob Ihr Skript die Hooks verwendet. Um die Installation eines Hooks zu erzwingen, fügen Sie die InstallKeybdHook- und/oder InstallMouseHook-Funktion in das Skript ein.

Während die Funktion wartet, können neue Threads via Hotkeys, benutzerdefinierte Menüpunkte oder Timer gestartet werden.

Um auf das Loslassen von zwei oder mehr Tasten zu warten, verwenden Sie KeyWait mehrmals. Zum Beispiel:

KeyWait "Control"  ; Warten, bis STRG und ALT losgelassen werden.
KeyWait "Alt"

Um auf das Drücken einer beliebigen Taste aus einer Liste von Tasten zu warten, siehe InputHook-Beispiel #4.

GetKeyState, Tastenliste, InputHook, KeyHistory, InstallKeybdHook, InstallMouseHook, ClipWait, WinWait

Beispiele

Wartet, bis die A-Taste losgelassen wird.

KeyWait "a"

Wartet, bis die linke Maustaste nach unten gedrückt wird.

KeyWait "LButton", "D"

Wartet bis zu 3 Sekunden, bis die erste Controllertaste nach unten gedrückt wird.

KeyWait "Joy1", "D T3"

Wartet, bis die linke ALT-Taste logisch losgelassen wird.

KeyWait "LAlt", "L"

Wenn dieser Hotkey gedrückt wird, wartet KeyWait, bis die Feststelltaste physisch losgelassen wird. Dies hat zur Folge, dass nachfolgende Anweisungen beim Loslassen statt Drücken ausgeführt werden. Dieses Verhalten ähnelt ~CapsLock up::.

~CapsLock::
{
    KeyWait "CapsLock"  ; Wartet auf das physische Loslassen.
    MsgBox "Sie haben die FESTSTELL-Taste gedrückt und losgelassen."
}

Belegt eine Tastatur- oder Maustaste neu. (Dieses Beispiel dient nur zur Illustration, da es einfacher wäre, die interne Neubelegung zu verwenden.) Im folgenden Hotkey wird die Maustaste gedrückt gehalten, während NumpadAdd unten ist, was NumpadAdd effektiv zu einer Maustaste macht.

*NumpadAdd::
{
    MouseClick "left",,, 1, 0, "D"  ; Die linke Maustaste gedrückt halten.
    KeyWait "NumpadAdd"  ; Wartet, bis die Taste losgelassen wird.
    MouseClick "left",,, 1, 0, "U"  ; Die Maustaste loslassen.
}

Erkennt, ob eine Taste zweimal gedrückt wurde (ähnlich einem Doppelklick). KeyWait verhindert, dass die Autowiederholungsfunktion der Tastatur einen ungewollten Doppeldruck erzeugt, wenn die rechte STRG-Taste zum Modifizieren einer anderen Taste gedrückt gehalten wird. Hierzu wird der Thread des Hotkeys am Laufen gehalten, wodurch die Autowiederholung blockiert wird, solange #MaxThreadsPerHotkey standardmäßig 1 ist. Für ein ausführlicheres Skript, das zwischen einfachem, doppeltem und dreifachem Tastendruck unterscheidet, siehe SetTimer-Beispiel #3.

~RControl::
{
    if (A_PriorHotkey != "~RControl" or A_TimeSincePriorHotkey > 400)
    {
        ; Zu viel Zeit zwischen den Instanzen, also kein Doppeldruck.
        KeyWait "RControl"
        return
    }
    MsgBox "Sie haben die rechte STRG-Taste doppelt gedrückt."
}