GetKeyState

Gibt 1 (true) oder 0 (false) zurück, je nachdem, ob die angegebene Tastatur-, Maus- oder Controllertaste unten oder oben ist. Ruft auch Controllerwerte ab.

IstUnten := GetKeyState(TasteName , Modus)

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. Beispiele: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.

Alternativ kann explizit ein eindeutiger virtueller Tastencode wie vkFF angegeben werden. Tastencodes sind nützlich, um auf Tasten zu verweisen, die keinen Namen haben (selten). Schauen Sie sich die Instruktion am Ende der Tastenliste an, um zu erfahren, wie der Code einer solchen Taste ermittelt werden kann. Beachten Sie, dass dieser Code hexadezimal sein muss.

Bekannte Einschränkung: Diese Funktion kann nicht zwischen zwei Tasten unterscheiden, die den gleichen virtuellen Tastencode haben, wie z.B. Left und NumpadLeft.

Modus

Typ: Zeichenkette

Dieser Parameter wird ignoriert, wenn Controllerwerte abgerufen werden.

Wenn weggelassen, wird standardmäßig der logische Status der Taste abgerufen. Dies ist der Status, den das Betriebssystem und das aktive Fenster für diese Taste vermuten, der aber nicht unbedingt dem physischen Status entspricht.

Andernfalls geben Sie einen der folgenden Buchstaben an:

P: Ruft den physischen Status ab (d.h. ob der Benutzer eine Taste physisch gedrückt hält). 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 (vorausgesetzt, die Taste wurde während der Skriptausführung nach unten gedrückt). 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, rufen Sie InstallKeybdHook und/oder InstallMouseHook auf.

T: Ruft den Schaltstatus ab. Bei allen Tasten außer Feststell, Num und Rollen ist der Schaltstatus beim Start des Skripts grundsätzlich immer 0 und wird nicht zwischen Prozessen synchronisiert.

Rückgabewert

Typ: Integer (boolesch), Float, Integer oder Zeichenkette (leer)

Diese Funktion gibt 1 (true) zurück, wenn die Taste unten ist (oder eingeschaltet ist), oder 0 (false), wenn sie oben ist (oder ausgeschaltet ist).

Wenn TasteName die Achse eines Sticks wie z.B. JoyX ist, gibt diese Funktion eine Floating-Point-Zahl zwischen 0 und 100 zurück, die die Position des Sticks als Prozentsatz des Bewegungsbereichs dieser Achse repräsentiert. Mit dem Testskript können Sie Ihren Controller analysieren.

Wenn TasteName JoyPOV ist, gibt diese Funktion einen Integer zwischen 0 und 35900 zurück. Die folgenden ungefähren POV-Werte werden von den meisten Controllern verwendet:

Wenn TasteName JoyName, JoyButtons, JoyAxes oder JoyInfo ist, wird der Name, die Anzahl der Tasten, die Anzahl der Achsen bzw. die Fähigkeiten des Controllers abgerufen. Weitere Informationen finden Sie unter Gamecontroller.

Wenn TasteName eine Taste oder ein Bedienelement eines Controllers ist, die/das nicht erkannt werden konnte, gibt diese Funktion eine leere Zeichenkette zurück.

Fehlerbehandlung

Es wird ein ValueError ausgelöst, wenn ungültige Parameter erkannt wurden, z.B. wenn TasteName in der aktuellen Tastaturbelegung nicht existiert.

Bemerkungen

KeyWait ist besser geeignet als eine GetKeyState-Schleife, wenn es darum geht, auf die Statusänderung einer Tastatur-, Maus- oder Controllertaste zu warten.

Es kann vorkommen, dass Betriebssysteme mit ungewöhnlichen Tastaturtreibern den Status von Tasten, insbesondere den Schaltstatus von Tasten wie Feststell, nur langsam aktualisieren. Wenn Sie also vorhaben, den geänderten Status einer solchen Taste zu prüfen, ist es ratsam, ein Sleep vor der Überprüfung zu setzen, um dem Betriebssystem genügend Zeit zu geben, den Status der Taste zu aktualisieren.

Beispiele für die Verwendung von GetKeyState mit einem Controller finden Sie unter Controllerneubelegung und Controller-Zu-Maus-Skript.

GetKeyVK, GetKeySC, GetKeyName, KeyWait, Tastenliste, Controllerneubelegung, KeyHistory, InstallKeybdHook, InstallMouseHook

Beispiele

Ruft den aktuellen Status der rechten Maustaste ab.

Status := GetKeyState("RButton")

Ruft den aktuellen Status der zweiten Taste des ersten Controllers ab.

Status := GetKeyState("Joy2")

Prüft, ob mindestens eine Umschalt-Taste unten ist.

if GetKeyState("Shift")
    MsgBox "Mindestens eine UMSCHALT-Taste ist unten."
else
    MsgBox "Keine UMSCHALT-Taste unten."

Ruft den aktuellen Schaltstatus von Feststell ab.

Status := GetKeyState("CapsLock", "T")

Neubelegung. (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. Diese Methode kann auch verwendet werden, um eine Aktion zu wiederholen, während der Benutzer eine Taste gedrückt hält.

*NumpadAdd::
{
    MouseClick "left",,, 1, 0, "D"  ; Die linke Maustaste gedrückt halten.
    Loop
    {
        Sleep 10
        if !GetKeyState("NumpadAdd", "P")  ; Die Taste wurde losgelassen, also Schleife verlassen.
            break
        ; ... fügen Sie hier beliebig andere Aktionen ein, die wiederholt werden sollen.
    }
    MouseClick "left",,, 1, 0, "U"  ; Die Maustaste loslassen.
}

Macht das Verhalten einer Controllertaste abhängig von der Achsenposition des Sticks.

joy2::
{
    JoyX := GetKeyState("JoyX")
    if JoyX > 75
        MsgBox "Aktion #1 (Taste gedrückt, während Stick nach rechts gedrückt wurde)."
    else if JoyX < 25
        MsgBox "Aktion #2 (Taste gedrückt, während Stick nach links gedrückt wurde)."
    else
        MsgBox "Aktion #3 (Taste gedrückt, während Stick horizontal zentriert wurde)."
}

Weitere Beispiele finden Sie unter Controllerneubelegung und Controller-Zu-Maus-Skript.