Prüft, ob eine Taste (Maus oder Tastatur) oder ein Joystickbutton gedrückt ist oder nicht, und liefert außerdem den Joystickstatus.
GetKeyState, OutputVar, KeyName [, Mode]
KeyIsDown := GetKeyState("KeyName" [, "Mode"])
| OutputVar |
Der Name der Variablen, in der der abgefragte Statuswert gespeichert wird. Dieser Wert ist entweder D (down, gedrückt) oder U (up, nicht gedrückt). Die GetKeyState() Funktion liefert dagegen 1 (true, wahr) für gedrückt und 0 (false, falsch) für nicht gedrückt. Wenn der Status nicht bestimmt werden konnte, wird die Variable geleert. Das Folgende gilt nur für Joysticks: 1) Für eine Joystickachse wie JoyX, wird OutputVar auf einen Gleitkommawert zwischen 0 und 100 gesetzt, der der Position des Joysticks als Prozentwert des Bewegungsbereichs entspricht. Das Format der Zahl kann mit SetFormat bestimmt werden. Mit diesem Testskript können die Eigenschaften von Joysticks analysiert werden. 2) Wenn KeyName JoyPOV ist, wird eine Zahl zwischen 0 und 35900 gespeichert. Die folgenden Richtwerte gelten für viele Joysticks: |
| KeyName | Keyname kann nahezu jedes einzelne Zeichen der Tastatur oder einen der Tastennamen der Tastenliste enthalten, wie z.B. eine Maus- oder Joysticktaste (unter Windows 95/98/Me wird der Status der Maustasten aber nicht erkannt). Beispiele: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1. Alternativ kann ein virtueller Tastencode wie vkFF angegeben werden, wenn z.B. eine spezielle Sondertaste keinen Namen hat. Der virtuelle Tastencode einer solchen Taste kann mit dem am Ende der Tastenlistenseite beschriebenen Verfahren ermittelt werden. |
| Mode | Bei Joystickabfragen wird dieser Parameter ignoriert. Wenn dieser Parameter weggelassen wird, wird als Standard der logische Status der Taste abgefragt. Das ist der Status, den das Betriebssystem und das aktive Fenster für die Taste erkennen, er entspricht aber nicht immer dem physischen Status. Alternativ kann einer dieser Buchstaben angegeben werden: P: Abfrage des physischer Status (d.h., ob der Benutzer eine Taste gedrückt hält). Unter Windows Me/98/95 entspricht der physische Status (Mode = P) fast immer dem logischen. Unter Windows NT/2000/XP oder späteren Versionen entspricht der physische Status normalerweise dem logischen, es sei denn, dass der Tastatur- und/oder Maushook installiert ist. In diesem Fall wird exakt ermittelt, ob der Benutzer die Taste oder den Button tatsächlich gedrückt hält oder nicht, wenn die Taste zur Laufzeit des Skripts gedrückt wurde. Ob ein Skript die Hooks verwendet, kann man über die KeyHistory Anweisung oder den entsprechenden Menüeintrag feststellen. Mit den Direktiven #InstallKeybdHook und/oder #InstallMouseHook kann die Installation der Hooks erzwungen werden. T: Liefert den aktuellen Umschaltstatus (toggle state) für Tasten mit dieser Eigenschaft wie Feststelltaste (Capslock), Num (Numlock), Rollen (Scrolllock) und Einfg (Insert). Der zurückgelieferte Wert "D" entspricht dabei dem Status "angeschaltet" (on), während "U" "ausgeschaltet" (off) bedeutet. Die Funktion GetKeyState() liefert aber auch hier 1 (wahr/true) für "angeschaltet" und 0 (falsch/false) für "ausgeschaltet". Der Umschaltstatus der Einfg-Taste (Insert) wird nur unter Windows 2000/XP oder späteren Versionen korrekt erkannt. Unter Windows 9x ist das Erkennen des Umschaltstatus weniger zuverlässig. Der neue Status wird z.B. nicht immer korrekt erkannt, bevor das Skript ein Fenster wie z.B. eine MsgBox geöffnet hat. |
Für das Warten auf einen Statuswechsel ist KeyWait besser geeignet als eine Schleife mit GetKeyState.
Auf Systemen mit besonderen Tastaturtreibern kann es einige Zeit dauern, bis der Status der Tasten aktualisiert ist, insbesondere der Umschaltstatus von Tasten wie der Feststelltaste (capslock). Wenn ein Skript den Status einer solchen Taste unmittelbar prüft, nachdem er sich geändert hat, sollte dem System mit einem vorherigen Sleep die für die Statusänderung nötige Zeit eingeräumt werden.
Beispiele für die Verwendung von GetKeyState mit Joysticks finden sich auf der Joystick-Remapping Seite und im Joystick-To-Mouse Skript.
GetKeyState(), KeyWait, Key List, Joystick Remapping, KeyHistory, #InstallKeybdHook, #InstallMouseHook
; Einfache Beispiele: GetKeyState, state, RButton ; Rechte Maustaste. GetKeyState, state, Joy2 ; Der zweite Button des ersten Joysticks. GetKeyState, state, Shift if state = D MsgBox Zumindest eine Shifttaste ist gedrückt. else MsgBox Keine der Shifttasten ist gedrückt. GetKeyState, state, CapsLock, T ; "D", wenn CapsLock angeschaltet ist, sonst "U". state := GetKeyState("Capslock", "T") ; "1" (wahr), wenn CapsLock angeschaltet ist, sonst "0" (falsch). ; Beispiel für eine Umbelegung (das ist nur eine Demonstration, es geht leichter mit der ; eingebauten Umbelegungsfunktionalität): ; Im folgenden Hotkey wird die Maustaste gedrückt gehalten, solange NumpadAdd gedrückt ; ist, womit NumpadAdd in eine Maustaste verwandelt wird. Mit dieser Methode können ; auch Aktionen wiederholt werden, solange der Benutzer eine Taste gedrückt hält: *NumpadAdd:: MouseClick, left,,, 1, 0, D ; Linke Maustaste gedrückt halten. Loop { Sleep, 10 GetKeyState, state, NumpadAdd, P if state = U ; NumpadAdd wurde losgelassen, die Schleife wird verlassen. break ; ... hier können weitere Aktionen eingefügt werden, die wiederholt werden sollen. } MouseClick, left,,, 1, 0, U ; Maustaste lösen. return ; Beispiel: Von der Auslenkung abhängiges Verhalten eines Joystickbuttons.
joy2::
GetKeyState, joyx, JoyX
if joyx > 75
MsgBox Action #1 (Button 2 wurde gedrückt, während der Joystick nach rechts geschoben ist).
else if joyx < 25
MsgBox Action #2 (Button 2 wurde gedrückt, während der Joystick nach links geschoben ist).
else
MsgBox Action #3 (Button 2 wurde gedrückt, während der Joystick in der horizontalen Mittelstellung ist).
return
; Siehe auch die Joystick-Remapping Seite und das Joystick-To-Mouse Skript für weiter Beispiele.