Prüft, ob eine Taste gedrückt wurde
#include <Misc.au3>
_IsPressed ( [$vKey = Default [, $vDLL = Default [, $bCheckModifierKey = False]]] )
| $vKey | [optional] Zu überprüfende Taste (Zeichenfolge), $VK_* wie in „WinAPIvkeysConstants.au3” definiert oder ein Array der zu drückenden Tasten. Wenn „Default” verwendet wird, wird der interne Handle zur DLL geschlossen. Wenn dieses nicht mehr benötigt wird, sollte man ihn mit _IsPressed() schließen. |
| $vDLL | [optional] Handle zu der DLL (standardmäßig user32.dll) |
| $bCheckModifierKey | [optional] Die Modifikatortasten SHIFT, STRG, ALT oder WIN werden überprüft, um zu vermeiden, dass „Modifikatortaste“ + $vKey nur für $vKey zurückgegeben wird (siehe Bemerkungen) (Standard) |
| >0: | wenn die Taste gedrückt wird oder die auf 1 basierende Taste der ausgewählten Taste im Array (siehe Bemerkungen). |
| 0: | wenn die Taste nicht gedrückt wird oder kein _IsPressed(...) auf _IsPressed() folgt. |
Falls diese Funktion wiederholt aufgerufen wird, sollte die Datei 'user32.dll' geöffnet werden und durch ein Handle übergeben werden.
Es ist noch zu beachten, dass das Handle am Ende des Skripts mithilfe der Funktion DllClose() geschlossen wird.
Wenn Sie $vDLL = Default verwenden und das AutoIt-Skript nicht beenden und die Verwendung von _IsPressed(...) einstellen,
rufen Sie dann _IsPressed() auf, um den intern verwendeten Handle zu schließen.
Wenn $vKey eine Zeichenfolge oder ein $VK_* ist, wie in „WinAPIvkeysConstants.au3” definiert, dann
gibt _IsPressed() 1 zurück, bis die Taste gedrückt wird.
Selbst kurze Tastendrücke können zu mehreren Rückgaben innerhalb einer Schleife führen.
Wenn der aufgerufene Code keine blockierende Funktion (wie MsgBox) enthält und der Benutzer keine Mehrfachrückgaben benötigt,
sollte das Skript warten, bis _IsPressed() 0 zurückgibt, bevor es fortfährt (siehe Beispiel 1)
Wenn $vKey ein Array ist, kehrt die Funktion zurück, wenn die Taste gedrückt wird.
Der Rückgabewert ist 1, wenn $vKey[0] gedrückt wird, 2, wenn $vKey[1] gedrückt wird, ... (siehe Beispiel 2).
Wenn $bCheckModifierKey nicht wahr ist, gibt die Kombination aus einer „Modifikatortaste” + Taste 0 zurück,
und @extended wird gesetzt, wenn die Modifikatortaste gedrückt wird: 1 = SHIFT, 2 = CTRL, 3 = ALT, 4 = WIN, 5 = rechte WIN (siehe Beispiel 2).
Wenn $bCheckModifierKey = True ist, erfolgt die Rückgabe, wenn die „Modifikatortaste” losgelassen wird.
Wenn $bCheckModifierKey = -1 ist, erfolgt die Rückgabe, wenn die „Modifikatortaste” gedrückt wird.
_IsPressed() gibt 1 zurück wenn die Taste losgelassen wurde.
Selbst kurze Tastendrücke können mehrfach innerhalb einer Schleife zurückgegeben werden.
Wenn der verwendete Code keine blockierende Funktion wie z. B. MsgBox enthält und der User keine mehrfachen Returns benötigt, so sollte das Skript warten bis _IsPressed() 0 zurückgibt bevor dieses fortfährt.
| VirtualKey | String | Key |
|---|---|---|
| $VK_LBUTTON | 01 | Linke Maustaste |
| $VK_RBUTTON | 02 | Rechte Maustaste |
| $VK_CANCEL | 03 | Control-break processing |
| $VK_MBUTTON | 04 | Mittlere Maustaste (three-button mouse) |
| $VK_XBUTTON1 | 05 | X1 Maus-Taste |
| $VK_XBUTTON2 | 06 | X2 Maus-Taste |
| $VK_BACK | 08 | Löschtaste rückwärts |
| $VK_TAB | 09 | Tabulator-Taste |
| $VK_CLEAR | 0C | Entf-Taste |
| $VK_RETURN | 0D | Enter/Return-Taste |
| $VK_SHIFT | 10 | Shift/Umschalt/"Großschreib"-Taste |
| $VK_CONTROL | 11 | Ctrl/Strg-Taste |
| $VK_MENU | 12 | Alt-Taste |
| $VK_PAUSE | 13 | Pause-Taste |
| $VK_CAPITAL | 14 | Feststelltaste |
| $VK_ESCAPE | 1B | Esc-Taste |
| $VK_SPACE | 20 | Leertaste |
| $VK_PRIOR | 21 | Bild-auf Taste |
| $VK_NEXT | 22 | Bild-ab Taste |
| $VK_END | 23 | Ende-Taste |
| $VK_HOME | 24 | Pos 1-Taste |
| $VK_LEFT | 25 | Pfeiltaste nach links |
| $VK_UP | 26 | Pfeiltaste nach oben |
| $VK_RIGHT | 27 | Pfeiltaste nach rechts |
| $VK_DOWN | 28 | Pfeiltaste nach unten |
| $VK_SELECT | 29 | Auswahltaste |
| $VK_PRINT | 2A | Druck-Taste |
| $VK_EXECUTE | 2B | Ausführentaste |
| $VK_SNAPSHOT | 2C | Drucktaste |
| $VK_INSERT | 2D | Einfg-Taste |
| $VK_DELETE | 2E | Entf-Taste |
| $VK_HELP | 2F | Hilfe-Taste |
| $VK_0 - 9 | 30-39 | 0-9 Tasten |
| $VK_A - Z | 41-5A | A-Z Tasten |
| $VK_LWIN | 5B | Linke Windows-Taste |
| $VK_RWIN | 5C | Rechte Windows-Taste |
| $VK_APPS | 5D | PopUp Menu Key - Anwendungstaste auf einer Microsoft Natural Tastatur |
| $VK_NUMPAD0 - 9 | 60-69 | rechter Nummerblock Taste 0 - 9 |
| $VK_MULTIPLY | 6A | rechter Nummerblock Malzeichen |
| $VK_ADD | 6B | rechter Nummerblock Pluszeichen |
| $VK_SEPARATOR | 6C | Eingabetaste |
| $VK_SUBTRACT | 6D | rechter Nummerblock Minuszeichen |
| $VK_DECIMAL | 6E | rechter Nummerblock Kommazeichen |
| $VK_DIVIDE | 6F | rechter Nummerblock Geteiltzeichen |
| $VK_F1 - 12 | 70 | F1-F12 Tasten |
| $VK_F13 - 16 | 7C-7F | F13 Taste - F16 Taste |
| $VK_F17 - 24 | 80H-87H | F17 Taste - F24 Taste |
| $VK_NUMLOCK | 90 | Num-Taste |
| $VK_SCROLL | 91 | Rollen-Taste |
| $VK_LSHIFT | A0 | linke Shift/Umschalt/Feststelltaste |
| $VK_RSHIFT | A1 | rechte Shift/Umschalt/Feststelltaste |
| $VK_LCONTROL | A2 | linke Ctrl/Strg-Taste |
| $VK_RCONTROL | A3 | rechte Ctrl/Strg-Taste |
| $VK_LMENU | A4 | (linke) Alt-Taste |
| $VK_RMENU | A5 | (rechte) Alt Gr-Taste |
| $VK_OEM_1 | BA | ; |
| $VK_OEM_PLUS | BB | = |
| $VK_OEM_COMMA | BC | , |
| $VK_OEM_MINUS | BD | - |
| $VK_OEM_PERIOD | BE | . |
| $VK_OEM_2 | BF | / |
| $VK_OEM_3 | C0 | ` |
| $VK_OEM_4 | DB | [ |
| $VK_OEM_5 | DC | \ |
| $VK_OEM_6 | DD | ] |
Suche nach GetAsyncKeyState in der MSDN Bibliothek.
#include <Misc.au3> #include <MsgBoxConstants.au3> #include <WinAPIvkeysConstants.au3> Local $hDLL = DllOpen("user32.dll") While 1 If _IsPressed("10", $hDLL) Then ConsoleWrite("_IsPressed - Shift-Taste wurde gedrückt. @extended = " & @extended & @CRLF) ; Wartet bis die Taste wieder losgelassen wurde. While _IsPressed("10", $hDLL) Sleep(100) WEnd ConsoleWrite("_IsPressed - Shift-Taste wurde losgelassen. @extended = " & @extended & @CRLF) ElseIf _IsPressed("1B", $hDLL) Then ConsoleWrite("_IsPressed - Esc-Taste wurde gedrückt. @extended = " & @extended & @CRLF) MsgBox($MB_SYSTEMMODAL, "_IsPressed", "Da Esc-Taste gedrückt wurde wird die Anwendung beendet.", 3) ExitLoop EndIf Sleep(100) WEnd DllClose($hDLL)
#include <Misc.au3> #include <MsgBoxConstants.au3> #include <WinAPIvkeysConstants.au3> Local $asModifierKeys[6] = [0, "VK_SHIFT", "VK_CONTROL", "VK_MENU", "VK_LWIN", "VK_RWIN"] Local $aKeys[3] = [$VK_ESCAPE, $VK_LBUTTON, $VK_TAB] While 1 Local $iRet = _IsPressed($aKeys, Default, True) ; Check modifier If Not $iRet And @extended Then ConsoleWrite("The modifier key " & $asModifierKeys[@extended] & " has been pressed. @extended = " & @extended & @CRLF) Local $sKey Switch $iRet Case 1 ; Keyboard ESC $sKey = "{ESCAPE}" ExitLoop Case 2 ; MouseClick Left $sKey = "{LBUTTON}" ExitLoop Case 3 ; Keyboard Tab $sKey = "{TAB}" ExitLoop EndSwitch Sleep(100) WEnd _IsPressed() ; to DLLClose the default Dll created by the previous _IsPressed_(...) Send("^z") ; to avoid change in the Scite Window ConsoleWrite("The key " & $sKey & " has been pressed." & @CRLF) MsgBox($MB_SYSTEMMODAL, "Result", "The key " & $sKey & " has been pressed.", 2)
#include <Misc.au3> #include <MsgBoxConstants.au3> #include <WinAPIvkeysConstants.au3> Example() Func Example() While 1 If _IsPressed($VK_F2, Default, True) Then ConsoleWrite("_IsPressed - F2 (without any modifier keys pressed) was pressed." & @CRLF) ; Wait until key is released. While _IsPressed($VK_F2, Default, True) Sleep(100) WEnd ConsoleWrite("_IsPressed - F2 (without any modifier keys pressed) was released." & @CRLF) ElseIf _IsPressed($VK_ESCAPE) Then MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.", 3) ExitLoop EndIf Sleep(100) WEnd _IsPressed() ; to release the internal handle created by previous call to _IsPressed(...) EndFunc ;==>Example