GetKeyState

GetKeyState kann als Funktion oder Befehl verwendet werden, wobei Ersteres für neue Skripte empfohlen ist. Beide prüfen, ob eine Tastatur-, Maus- oder Controllertaste oben oder unten ist, und rufen auch Controllerwerte ab. Der Unterschied besteht darin, dass die Funktion in einem Ausdruck verwendet werden kann und 1 (true) für unten oder 0 (false) für oben zurückgibt, während der Befehl D für unten oder U für oben in eine Variable speichert.

GetKeyState-Funktion

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.

TasteIstUnten := GetKeyState(TasteName , Modus)

Parameter

TasteName

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 Anleitung am Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

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

Modus

Dieser Parameter wird ignoriert, wenn Controllerwerte abgerufen werden.

Wenn leer oder 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 dem KeyHistory-Befehl oder -Menüpunkt können Sie prüfen, ob Ihr Skript die Hooks verwendet. Um die Installation eines Hooks zu erzwingen, fügen Sie die Direktiven #InstallKeybdHook und/oder #InstallMouseHook in Ihr Skript ein.

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

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). Für spezielle Controllerbedienelemente wie Achsen und POV-Schalter werden andere Werte abgerufen.

Wenn TasteName ungültig ist oder der Status der Taste nicht ermittelt werden konnte, wird eine leere Zeichenkette zurückgegeben.

GetKeyState-Befehl

Speichert den Buchstaben D oder U in eine Variable, je nachdem, ob die angegebene Tastatur-, Maus- oder Controllertaste unten oder oben ist. Ruft auch Controllerwerte ab.

Veraltet: Dieser Befehl ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die oben beschriebene GetKeyState-Funktion.

GetKeyState, AusgabeVar, TasteName , Modus

Parameter

AusgabeVar

Name der Ausgabevariable, in der der Status der Taste gespeichert werden soll, entweder D für unten (down) oder U für oben (up). Die Variable wird leer gemacht, wenn der Status der Taste nicht ermittelt werden konnte. Für spezielle Controllerbedienelemente wie Achsen und POV-Schalter werden andere Werte abgerufen.

TasteName

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 Anleitung am Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

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

Modus

Dieser Parameter wird ignoriert, wenn Controllerwerte abgerufen werden.

Wenn leer oder 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 dem KeyHistory-Befehl oder -Menüpunkt können Sie prüfen, ob Ihr Skript die Hooks verwendet. Um die Installation eines Hooks zu erzwingen, fügen Sie die Direktiven #InstallKeybdHook und/oder #InstallMouseHook in Ihr Skript ein.

T: Ruft den Schaltstatus ab. D bedeutet, dass die Taste "an" ist, und U bedeutet, dass sie "aus" ist. Bei allen Tasten außer Feststell, Num und Rollen ist der Schaltstatus beim Start des Skripts grundsätzlich immer U und wird nicht zwischen Prozessen synchronisiert.

Spezielle Controllerbedienelemente

Wenn TasteName die Achse eines Sticks wie z.B. JoyX ist, wird eine Floating-Point-Zahl zwischen 0 und 100 zurückgegeben, die die Position des Sticks als Prozentsatz des Bewegungsbereichs dieser Achse repräsentiert. Das Format der Zahl kann via Format() oder SetFormat geändert werden. Mit dem Testskript können Sie Ihren Controller analysieren.

Wenn TasteName JoyPOV ist, wird ein Wert zwischen 0 und 35900 zurückgegeben. 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.

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.

KeyWait, Tastenliste, Controllerneubelegung, KeyHistory, #InstallKeybdHook, #InstallMouseHook

Beispiele

Funktion vs. Befehl. Obwohl der erste Codeblock die Funktion und der zweite den Befehl verwendet, sind beide Codeblöcke funktionsgleich.

Status := GetKeyState("RButton")  ; Rechte Maustaste.
Status := GetKeyState("Joy2")  ; Die zweite Taste des ersten Controllers.

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

Status := GetKeyState("CapsLock", "T") ; True, wenn FESTSTELL-Taste AN ist, andernfalls False.
GetKeyState, Status, RButton  ; Rechte Maustaste.
GetKeyState, Status, Joy2  ; Die zweite Taste des ersten Controllers.

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

GetKeyState, Status, CapsLock, T ;  D, wenn FESTSTELL-Taste AN ist, andernfalls U.

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.
return

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).
return

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