Hallo liebe AutoIt-Gemeinde,
ich bin ganz neu hier im Forum und schreibe jetzt seit ca. 4 Monaten mit Begeisterung kleinere und z.T. auch größere AutoIt-Skripte. Nicht alles davon ist schon fertig, aber hier möchte ich endlich schon mal ein nützliches Tool von mir vorstellen.
Den UDF-Befehl _IsPresed (aus der Misc.au3) finde ich sehr umständlich und unbefriedigend und so habe ich einen eigenen Befehl geschrieben:
Key( $Tastenname, $Repeatmethode, $Delay)
Damit lassen sich alle Tasten und Maustasten z.B. beim Namen abfragen, z.B.:
While Not Key("ESC")
.....
Wend
das versteht doch jeder auf einem Blick. Außerdem habe ich dem Nutzer des Key-Befehls sehr viel Freiheit gelassen. Statt dem Schlüsselwort "ESC" könnte man z.B. auch "ESCAPE" schreiben. Eine genaue Liste aller Schlüsselwörter findest Du hier:
Spoiler anzeigen
;*******************************************
;* *
;* Beispiel zum Befehl Key() *
;* *
;*******************************************
;Autor: Deep Thought (http://www.autoit.de/)
;Syntax: Key($Tastenname, $Repeatmethode, $Delay)
Es gelten die gleichen Schlüsselwörter, wie beim Send()-Befehl. Daneben sind folgende Schlüsselwortvarianten erlaubt:
==============================================================
A-Z, 0-9, F1-F16
==============================================================
==============================================================
Maustasten
==============================================================
"LMAUS", "L Maus", "LINKE MAUS", "MAUS L", "MAUS LINKS"
"RMAUS", "R MAUS", "RECHTE MAUS", "MAUS R, "MAUS RECHTS"
"MMAUS", "M MAUS", "MITTLERE MAUS", "MAUS M", "MAUS MITTE"
"1MAUS", "X1MAUS", "X1 MAUS", "MAUS X1"
"2MAUS", "X2MAUS", "X2 MAUS", "MAUS X2"
==============================================================
Shift, Strg, Alt, Win
==============================================================
"LSHIFT", "L SHIFT", "SHIFT L", "SHIFT LINKS", "LINKE SHIFT"
"RSHIFT", "R SHIFT", "SHIFT R", "SHIFT RECHTS", "RECHTE SHIFT"
"LCTRL", "L CTRL", "CTRL L", "CTRL LINKS", "LINKE CTRL", "LSTRG", "L STRG", "STRG L", "STRG LINKS", "LINKE STRG"
"RCTRL", "R CTRL", "CTRL R", "CTRL RECHTS", "RECHTE CTRL", "RSTRG", "R STRG", "STRG R", "STRG RECHTS", "RECHTE STRG"
"LALT", "L ALT", "ALT L", "ALT LINKS", "LINKE ALT"
"RALT", "R ALT", "ALT R", "ALT RECHTS", "RECHTE ALT", "ALTGR", "ALT GR"
"LWIN", "L WIN", "LWINDOWS", "L WINDOWS", "WIN L", "WIN LINKS", "WINDOWS L", "WINDOWS LINKS", "LINKE WIN", "LINKE WINDOWS"
"RWIN", "R WIN", "RWINDOWS", "R WINDOWS", "WIN R", "WIN RECHTS", "WINDOWS R", "WINDOWS RECHTS", "RECHTE WIN", "RECHTS WINDOWS"
"SHIFT" ; egal ob li/re
"CTRL", "STRG" ; egal ob li/re
"ALT" ; egal ob li/re
"WIN", "WINDOWS" ; egal ob li/re
==============================================================
Cursor, Seite
==============================================================
"LEFT", "CURSOR LEFT", "CURSOR LINKS", "LINKS"
"RIGHT", "CURSOR RIGHT", "CURSOR RECHTS", "RECHTS"
"UP", "CURSOR UP", "CURSOR HOCH", "CURSOR RAUF", "HOCH", "RAUF"
"DOWN", "CURSOR DOWN", "CURSOR RUNTER", "RUNTER"
"HOME", "POS1", "POS 1"
"END", "ENDE"
"PGUP", "PG UP", "PAGEUP", "PAGE UP", "BILD HOCH", "BILD RAUF", "SEITE HOCH", "SEITE RAUF"
"PGDN", "PG DN", "PGDOWN", "PG DOWN", "PAGEDOWN", "PAGE DOWN", "BILD RUNTER", "SEITE RUNTER"
==============================================================
Zehner-Tastatur
==============================================================
"NUMPAD*", "NUMPAD *", "NUMPADMULT"
"NUMPAD+", "NUMPAD +", "NUMPADADD"
"NUMPAD-", "NUMPAD -", "NUMPADSUB"
"NUMPAD,", "NUMPAD ,", "NUMPAD KOMMA", "NUMPADDOT"
"NUMPAD:", "NUMPAD :", "NUMPADDIV"
==============================================================
sonstige Zeichen
==============================================================
",", ";", "KOMMA"
"-", "_"
".", ":", "PUNKT"
"ß", "?", "\"
"°", "^"
"´", "`"
"<", ">", "|"
" ", "SPACE"
==============================================================
sonstige Steuerung
==============================================================
"BS", "BACKSPACE"
"TAB", "TABULATOR"
"RETURN", "ENTER"
"PAUSE"
"CAPSLOCK", "CAPSLOCK toggle"
"ESC", "ESCAPE"
"DRUCK", "DRUCKEN", "PRINTSCREEN", "PRINT SCREEN"
"INS", "INSERT", "EINFG", "EINFÜGEN"
"DEL", "DELETE", "ENTF", "ENTFERNEN"
"KONTEXT", "Context", "APPSKEY"
"NUM", "NUMLOCK", "NUMLOCK toggle"
"ROLLEN", "SCROLLLOCK", "SCROLLLOCK toggle"
Eine kleine Besonderheit ist, daß Du auch ganz komfortabel Tastenwiederholungen (incl. einer beliebig definierten Anschlag-Wiederholverzögerung) abfragen kannst, d.h. z.B. mit
$a=Key(Default,-180,700) fragst Du ab, ob irgend eine beliebige Taste (deshalb Default) gedrückt wird, und wenn die Taste länger als 700 ms gedrückt bleibt, dann wird die Taste alle 180 ms als gedrückt wiedererkannt.
Auf ähnliche Weise werden auch Doppelklicks von normalen Klicks unterschiedlich erkannt. Das ganze wird noch abgerundet, indem du alternativ auch mit dem Hex-Code zu jeder Taste wie bei _IsPresed arbeiten kannst. Damit kann man dann z.B. abfragen, ob eine Taste in einem bestimmten Bereich, z.B. 0x61 bis 0x7A gedrückt wurde.
Und hier jetzt meine UDF:
Spoiler anzeigen
;************************************************************************************************************
;* *
;* *
;* Key() *
;* ===== *
;* *
;* Version 1 *
;* Autor: Deep Thought (http://www.autoit.de) *
;* Syntax: Key( $Tastenname, [$Repeatmethode, [$Delay]] ) *
;* *
;* Abfrage, ob eine (bestimmte) (Maus-)Taste gedrückt wird. *
;* (Komfortable Alternative zum UDF-Befehl _IsPreset aus der Include-Datei <Misc.au3>) *
;* *
;* *
;* *
;* PARAMETER: *
;* ========== *
;* *
;* $NAME z.B. ("LSHIFT") => - Tastenname, fragt ab, ob eine bestimmte Taste gedrückt wird, *
;* z.B. die linke Umschalttaste *
;* *
;* - dabei sind zahllose Bezeichnungsvarianten möglich z.B.: *
;* "LSHIFT", "L SHIFT", "SHIFT L", "SHIFT LINKS", "LINKE SHIFT" *
;* *
;* - ob Groß-/Kleinschreibung spielt keine Rolle *
;* *
;* - Besonderheit bei SHIFT, CTRL, ALT und WIN: wenn z.B. nur "ALT" *
;* angegeben wird, dann ist es egal, ob die linke oder rechte Taste *
;* *
;* RÜCKGABEWERT: TRUE / FALSE *
;* ============= *
;* *
;* *
;* ("") => - überprüft, ob z.Zt. keine Taste gedrückt wird *
;* *
;* RÜCKGABEWERT: TRUE (=keine Taste)/ FALSE *
;* ============= *
;* *
;* *
;* ("HEX") => - gibt die aktuelle Taste als Hex-Zahl wieder *
;* *
;* RÜCKGABEWERT: zweistellige Hex-Zahl ("00", wenn keine Taste) *
;* ============= *
;* *
;* *
;* () => - gibt die aktuelle Taste als Tastennamen wieder (Bezeichnung ist *
;* identisch wie beim Send()-Befehl) *
;* *
;* RÜCKGABEWERT: z.B. "HOME", "PGDN" oder "NUMPAD3" *
;* ============= *
;* *
;* *
;* $Repeat (False)oder () => - Kein Repeat. RÜCKGABEWERT nur, in dem Moment wo Taste gedrückt wird*
;* *
;* *
;* ("Loslassen") => - Wie False, jedoch RÜCKGABEWERT nur im Moment des Taste loslassens *
;* *
;* *
;* ("Standard") => - Anschlag-Wiederholverzögerung = 800 Milisekunden *
;* - Wiederholgeschwindigkeit alle 200 Milisekunden *
;* *
;* *
;* (>0) => - Wiederholgeschwindigkeit in Milisekunden *
;* - keine Anschlag-Wiederholverzögerung, Repeat fängt sofort an *
;* *
;* *
;* (<0) => - Wiederholgeschwindigkeit in Milisekunden *
;* - mit Anschlag-Wiederholverzögerung (siehe auch $Delay) *
;* *
;* *
;* ("Doppelklick") => - Es wird überprüft, ob eine Taste in einem definierten Zeitrahmen *
;* (siehe $Delay) nur einmal oder doppelt angeklickt wurde *
;* *
;* RÜCKGABEWERT: z.B. "HOME" (ohne Doppelklick) *
;* ============= oder "Doppelklick HOME" (mit Doppelklick) *
;* *
;* *
;* $Delay (>=0) => - Bei Repeat: Anschlag-Wiederholverzögerung in Milisekunden *
;* *
;* - Bei Doppelklick: max. Gültigkeitsbereich zwischen 2 Klicks (in msek) *
;* *
;* *
;* (Default) / () => - Bei Repeat: 800 msek Anschlag-Wiederholverzögerung *
;* *
;* - Bei Doppelklick: 500 msek Gültigkeit zwischen 2 Klicks *
;* *
;* *
;************************************************************************************************************
#Region Includes und Globale Variabeln
#include-once
#include <Misc.au3>
Global $User32DLL
; Variabeln, die sich der Befehl "Key()" für den nächsten Aufruf merkt
Global $AHUDFsKey_Merken_Akt = False ; welche Taste (bzw. keine Taste) beim letzten mal
Global $AHUDFsKey_Merken_Repeatzeit = False ; Repeat
Global $AHUDFsKey_Merken_Anschlagbeginn ; wichtig für Repeat oder "Doppelklick"
Global $AHUDFsKey_Merken_AnzKlicks = 0 ; wichtig für "Doppelklick"
Global $AHUDFsKey_Merken_SelbeTaste = False ; wichtig für "Doppelklick"
Global $AHUDFsKey_Merken_Akt2
#EndRegion
; _
Func Key($Name=Default,$Repeat=False,$Delay=Default)
Local $Debug = False ; Zum testen dieser Funktion
; Standardwerte bei bestimmten Modi zuordnen
Switch $Repeat
Case "Standard"
$Repeat = -200
$Delay = 800
Case "Doppelklick"
If $Delay = Default then $Delay = 500 ; in diesem Fall die max. Verzögerung zwischen zwei Tastenklicks
Case Else
If $Delay = Default then $Delay = 800
EndSwitch
; Aktuelle Taste abfragen und überprüfen, ob sich was seit der letzten Abfrage geändert hat
Local $Aktuell = AHUDFKey_WelcheTaste($Name)
Local $Anders = Not(($AHUDFsKey_Merken_Akt = $Aktuell))
; Standard-Rückgabewert ermitteln, wenn keine Taste gedrückt ist
Switch $Name ; erwarteter Rückgabewert je nach Abfragemethode
Case Default ; ()
Local $KeineTaste = False
Case "HEX" ; ("HEX")
Local $KeineTaste = "00"
Case "" ; ("")
Local $KeineTaste = True
Case Else ; konkrete Tastenabfragen
Local $KeineTaste = False
EndSwitch
; ### Debug
If $Debug Then ToolTip("Name: "&$Name&@CRLF&"RepeatMode: "&$Repeat&@CRLF&"KeineTaste: "&$KeineTaste&@CRLF&@CRLF&"Aktuell: "&$Aktuell&@CRLF&"Anders: "&$Anders&@CRLF&@CRLF&"MerkenAkt: "&$AHUDFsKey_Merken_Akt&@CRLF&"MerkenTime: "&Int(TimerDiff($AHUDFsKey_Merken_Repeatzeit)))
; Neue Taste gedrückt
If $Anders And Not($Aktuell = $KeineTaste) Then
If $Debug Then Beep(3000,150)
$AHUDFsKey_Merken_Akt = $Aktuell
$AHUDFsKey_Merken_Repeatzeit = TimerInit()
Select ; Verhalten je nach Repeat-Modus
Case $Repeat = False
Return $Aktuell
Case $Repeat = "Loslassen"
Return $KeineTaste
Case $Repeat = "Doppelklick"
If $AHUDFsKey_Merken_AnzKlicks < 1 Then
$AHUDFsKey_Merken_Anschlagbeginn = TimerInit()
$AHUDFsKey_Merken_AnzKlicks += 1
$AHUDFsKey_Merken_SelbeTaste = $Aktuell
Return $Aktuell
Else
$AHUDFsKey_Merken_AnzKlicks = 0
If $AHUDFsKey_Merken_SelbeTaste = $Aktuell Then
Return "Doppelklick "&$Aktuell
Else
Return $Aktuell
EndIf
EndIf
Case $Repeat > 0 ; einfaches Repeat
$AHUDFsKey_Merken_Repeatzeit = TimerInit()
Return $Aktuell
Case $Repeat < 0 ; Repeat mit Anschlagverzögerung
$AHUDFsKey_Merken_Repeatzeit = TimerInit()
$AHUDFsKey_Merken_Anschlagbeginn = $AHUDFsKey_Merken_Repeatzeit
Return $Aktuell
EndSelect
EndIf
; Taste wird z.Zt. immer noch gedrückt
If Not($Aktuell = $KeineTaste) Then
If $Debug Then Beep()
Select ; Verhalten je nach Repeat-Modus
Case $Repeat = False
Return $KeineTaste
Case $Repeat = "Loslassen"
Return $KeineTaste
Case $Repeat = "Doppelklick"
Return $KeineTaste
Case $Repeat > 0 ; einfaches Repeat
If TimerDiff($AHUDFsKey_Merken_Repeatzeit) > $Repeat Then
$AHUDFsKey_Merken_Repeatzeit = TimerInit()
Return $Aktuell
Else
Return $KeineTaste
EndIf
Case $Repeat < 0 ; Repeat mit Anschlagverzögerung
If (TimerDiff($AHUDFsKey_Merken_Repeatzeit) > -$Repeat) And (TimerDiff($AHUDFsKey_Merken_Anschlagbeginn) > $Delay) Then
$AHUDFsKey_Merken_Repeatzeit = TimerInit()
Return $Aktuell
Else
Return $KeineTaste
EndIf
EndSelect
EndIf
; Taste gerade wieder losgelassen
If $Anders And ($Aktuell = $KeineTaste) Then
If $Debug Then Beep(150,300)
$AHUDFsKey_Merken_Akt2 = $AHUDFsKey_Merken_Akt
$AHUDFsKey_Merken_Akt = $Aktuell
Select ; Verhalten je nach Repeat-Modus
Case $Repeat = False
Return $KeineTaste
Case $Repeat = "Loslassen"
Return $AHUDFsKey_Merken_Akt2
Case $Repeat = "Doppelklick"
Return $KeineTaste
Case $Repeat > 0 ; einfaches Repeat
Return $KeineTaste
Case $Repeat < 0 ; Repeat mit Anschlagverzögerung
Return $KeineTaste
EndSelect
EndIf
; z.Zt. wird keine Taste gedrückt
If $Debug Then Beep(5000)
If ($Repeat = "Doppelklick") And (TimerDiff($AHUDFsKey_Merken_Anschlagbeginn) > $Delay) And ($AHUDFsKey_Merken_AnzKlicks > 0) Then $AHUDFsKey_Merken_AnzKlicks = 0
Return $KeineTaste
EndFunc
;*************************************
;* *
;* Unterfunktion *
;* *
;*************************************
#Region
Func AHUDFKey_WelcheTaste($Name=Default, $Repeat=False)
If Not($User32DLL) Then $User32DLL = DllOpen("user32.dll")
Local $Code, $Code2 = False
Switch $Name
;****************************************************************
; Tastenname oder Hex-Code als Returnwert
;****************************************************************
Case Default, "HEX"
For $n = 254 to 1 Step -1
If _IsPressed(Hex($n,2), $User32DLL) Then ExitLoop
Next
If $Name = "HEX" Then Return Hex($n,2) ; Hex-Code
Switch Hex($n,2)
;======================================================
; Maustasten
;======================================================
Case "01"
$Name = "LMAUS"
Case "02"
$Name = "RMAUS"
Case "04"
$Name = "MMAUS"
Case "05"
$Name = "X1MAUS"
Case "06"
$Name = "X2MAUS"
;======================================================
; Shift, Strg, Alt, Win
;======================================================
Case "A0"
$Name = "LSHIFT"
Case "A1"
$Name = "RSHIFT"
Case "A2"
$Name = "LCTRL"
Case "A3"
$Name = "RCTRL"
Case "A4"
$Name = "LALT"
Case "A5"
$Name = "RALT"
Case "5B"
$Name = "LWIN"
Case "5C"
$Name = "RWIN"
;======================================================
; Cursor, Seite
;======================================================
Case "25"
$Name = "LEFT"
Case "27"
$Name = "RIGHT"
Case "26"
$Name = "UP"
Case "28"
$Name = "DOWN"
Case "24"
$Name = "HOME"
Case "23"
$Name = "END"
Case "21"
$Name = "PGUP"
Case "22"
$Name = "PGDN"
;======================================================
; Zehner-Tastatur
;======================================================
Case "6A"
$Name = "NUMPADMULT"
Case "6B"
$Name = "NUMPADADD"
Case "6D"
$Name = "NUMPADSUB"
Case "6E"
$Name = "NUMPADDOT"
Case "6F"
$Name = "NUMPADDIV"
;======================================================
; sonstige Zeichen
;======================================================
Case "BC"
$Name = ","
Case "BD"
$Name = "-"
Case "BE"
$Name = "."
Case "DB"
$Name = "ß"
Case "DC"
$Name = "°"
Case "DD"
$Name = "´"
Case "E2"
$Name = "<"
Case "20"
$Name = "SPACE"
;======================================================
; sonstige Steuerung
;======================================================
Case "08"
$Name = "BACKSPACE"
Case "09"
$Name = "TAB"
Case "0D"
$Name = "ENTER"
Case "13" ; Achtung: Code nur sehr kurz abrufbar (Sleep() kann zu falschen Ergebnissen führen; auch keine Tastenwiederholung
$Name = "PAUSE"
Case "14"
$Name = "CAPSLOCK toggle"
Case "1B"
$Name = "ESC"
Case "2C"
$Name = "PRINTSCREEN"
Case "2D"
$Name = "INS"
Case "2E"
$Name = "DEL"
Case "5D"
$Name = "APPSKEY"
Case "90"
$Name = "NUMLOCK toggle"
Case "91"
$Name = "SCROLLLOCK toggle"
;======================================================
; keine Taste gedrückt
;======================================================
Case "00"
$Name = False
;======================================================
; A-Z, 0-9, F1-F16 oder direkter Tastaturcode
;======================================================
Case ELSE
Select
Case ($N >= 112) And ($N <= 127)
$Name = "F"&$N-111
Case ($N >= 96) And ($N <= 105)
$Name = "NUMPAD"&$N-96
Case ($N >= Asc("A")) And ($N <= Asc("Z"))
$Name = Chr($N)
Case ($N >= Asc("a")) And ($N <= Asc("z"))
$Name = Chr($N-32)
Case ($N >= Asc("0")) And ($N <= Asc("9"))
$Name = Chr($N)
Case Else ; direkter Tastaturcode wie in _IsPreset, da keine passende Zuordnung gefunden wurde
$Name = Hex($N,2)
EndSelect
EndSwitch
Return $Name
;****************************************************************
; True / False als Returnwert
;****************************************************************
;==============================================================
; Maustasten
;==============================================================
Case "LMAUS", "L Maus", "LINKE MAUS", "MAUS L", "MAUS LINKS"
$Code = "01"
Case "RMAUS", "R MAUS", "RECHTE MAUS", "MAUS R", "MAUS RECHTS"
$Code = "02"
Case "MMAUS", "M MAUS", "MITTLERE MAUS", "MAUS M", "MAUS MITTE"
$Code = "04"
Case "1MAUS", "X1MAUS", "X1 MAUS", "MAUS X1"
$Code = "05"
Case "2MAUS", "X2MAUS", "X2 MAUS", "MAUS X2"
$Code = "06"
;==============================================================
; Shift, Strg, Alt, Win
;==============================================================
Case "LSHIFT", "L SHIFT", "SHIFT L", "SHIFT LINKS", "LINKE SHIFT"
$Code = "A0"
Case "RSHIFT", "R SHIFT", "SHIFT R", "SHIFT RECHTS", "RECHTE SHIFT"
$Code = "A1"
Case "LCTRL", "L CTRL", "CTRL L", "CTRL LINKS", "LINKE CTRL", "LSTRG", "L STRG", "STRG L", "STRG LINKS", "LINKE STRG"
$Code = "A2"
Case "RCTRL", "R CTRL", "CTRL R", "CTRL RECHTS", "RECHTE CTRL", "RSTRG", "R STRG", "STRG R", "STRG RECHTS", "RECHTE STRG"
$Code = "A3"
Case "LALT", "L ALT", "ALT L", "ALT LINKS", "LINKE ALT"
$Code = "A4"
Case "RALT", "R ALT", "ALT R", "ALT RECHTS", "RECHTE ALT", "ALTGR", "ALT GR"
$Code = "A5"
Case "LWIN", "L WIN", "LWINDOWS", "L WINDOWS", "WIN L", "WIN LINKS", "WINDOWS L", "WINDOWS LINKS", "LINKE WIN", "LINKE WINDOWS"
$Code = "5B"
Case "RWIN", "R WIN", "RWINDOWS", "R WINDOWS", "WIN R", "WIN RECHTS", "WINDOWS R", "WINDOWS RECHTS", "RECHTE WIN", "RECHTS WINDOWS"
$Code = "5C"
Case "SHIFT" ; egal ob li/re
$Code = "A0"
$Code2 = "A1"
Case "CTRL", "STRG" ; egal ob li/re
$Code = "A2"
$Code2 = "A3"
Case "ALT" ; egal ob li/re
$Code = "A4"
$Code2 = "A5"
Case "WIN", "WINDOWS" ; egal ob li/re
$Code = "5B"
$Code2 = "5C"
;==============================================================
; Cursor, Seite
;==============================================================
Case "LEFT", "CURSOR LEFT", "CURSOR LINKS", "LINKS"
$Code = "25"
Case "RIGHT", "CURSOR RIGHT", "CURSOR RECHTS", "RECHTS"
$Code = "27"
Case "UP", "CURSOR UP", "CURSOR HOCH", "CURSOR RAUF", "HOCH", "RAUF"
$Code = "26"
Case "DOWN", "CURSOR DOWN", "CURSOR RUNTER", "RUNTER"
$Code = "28"
Case "HOME", "POS1", "POS 1"
$Code = "24"
Case "END", "ENDE"
$Code = "23"
Case "PGUP", "PG UP", "PAGEUP", "PAGE UP", "BILD HOCH", "BILD RAUF", "SEITE HOCH", "SEITE RAUF"
$Code = "21"
Case "PGDN", "PG DN", "PGDOWN", "PG DOWN", "PAGEDOWN", "PAGE DOWN", "BILD RUNTER", "SEITE RUNTER"
$Code = "22"
;==============================================================
; Zehner-Tastatur
;==============================================================
Case "NUMPAD*", "NUMPAD *", "NUMPADMULT"
$Code = "6A"
Case "NUMPAD+", "NUMPAD +", "NUMPADADD"
$Code = "6B"
Case "NUMPAD-", "NUMPAD -", "NUMPADSUB"
$Code = "6D"
Case "NUMPAD,", "NUMPAD ,", "NUMPAD KOMMA", "NUMPADDOT"
$Code = "6E"
Case "NUMPAD:", "NUMPAD :", "NUMPADDIV"
$Code = "6F"
;==============================================================
; sonstige Zeichen
;==============================================================
Case ",", ";", "KOMMA"
$Code = "BC"
Case "-", "_"
$Code = "BD"
Case ".", ":", "PUNKT"
$Code = "BE"
Case "ß", "?", "\"
$Code = "DB"
Case "°", "^"
$Code = "DC"
Case "´", "`"
$Code = "DD"
Case "<", ">", "|"
$Code = "E2"
Case " ", "SPACE"
$Code = "20"
;==============================================================
; sonstige Steuerung
;==============================================================
Case "BS", "BACKSPACE"
$Code = "08"
Case "TAB", "TABULATOR"
$Code = "09"
Case "RETURN", "ENTER"
$Code = "0D"
Case "PAUSE"
$Code = "13"
Case "CAPSLOCK", "CAPSLOCK toggle"
$Code = "14"
Case "ESC", "ESCAPE"
$Code = "1B"
Case "DRUCK", "DRUCKEN", "PRINTSCREEN", "PRINT SCREEN"
$Code = "2C"
Case "INS", "INSERT", "EINFG", "EINFÜGEN"
$Code = "2D"
Case "DEL", "DELETE", "ENTF", "ENTFERNEN"
$Code = "2E"
Case "KONTEXT", "Context", "APPSKEY"
$Code = "5D"
Case "NUM", "NUMLOCK", "NUMLOCK toggle"
$Code = "90"
Case "ROLLEN", "SCROLLLOCK", "SCROLLLOCK toggle"
$Code = "91"
;==============================================================
; keine Taste gedrückt
;==============================================================
Case ""
For $n = 0 to 255
If _IsPressed(Hex($n,2), $User32DLL) Then ExitLoop
Next
If $n >= 255 Then Return True
;==============================================================
; A-Z, 0-9, F1-F16 oder direkter Tastaturcode
;==============================================================
Case ELSE
Switch StringLen($Name)
Case 1
If (Asc($Name) >= Asc("A")) And (Asc($Name) <= Asc("Z")) Then $Code = Hex(ASC($Name)) ; A-Z
If (Asc($Name) >= Asc("0")) And (Asc($Name) <= Asc("9")) Then $Code = Hex(ASC($Name)) ; 0-9
Case 2
If ((Asc(StringLeft($Name,1)) >= Asc("0")) And (Asc(StringLeft($Name,1)) <= Asc("9"))) Or ((Asc(StringLeft($Name,1)) >= Asc("A")) And (Asc(StringLeft($Name,1)) <= Asc("E"))) Then $Code = $Name ; direkt der Tastaturcode wie bei _IsPreset
If StringLeft($Name,1) = "F" Then $Code = Hex(111+Number(StringTrimLeft($Name,1))) ; F1-F9
Case 3
If StringLeft($Name,1) = "F" Then $Code = Hex(111+Number(StringTrimLeft($Name,1))) ; F10-F16
Case 4
If StringLeft($Name,3) = "NUM" Then $Code = Hex(96+Number(StringRight($Name,1))) ; Num0-Num9
Case 5
If StringLeft($Name,4) = "NUM " Then $Code = Hex(96+Number(StringRight($Name,1))) ; Num0-Num9
Case 7
If StringLeft($Name,6) = "NUMPAD" Then $Code = Hex(96+Number(StringRight($Name,1))) ; Num0-Num9
EndSwitch
EndSwitch
Return _IsPressed($Code, $User32DLL) Or _IsPressed($Code2, $User32DLL)
EndFunc
#EndRegion
Und hier ein Beispielskript zum genauen Verständnis:
Spoiler anzeigen
;*******************************************
;* *
;* Beispiel zum Befehl Key() *
;* *
;*******************************************
;Autor: Deep Thought (http://www.autoit.de)
;Syntax: Key($Tastenname, $Repeatmethode, $Delay)
#include "Key.au3"
Dim $Taste, $AHUDFsTaste_Merken_Akt2, $Warten
;Beispiel 1
MsgBox(0,"Key( ) - Beispiel 1/5","Key( ) - ohne Parameter gibt den Namen der gedrückten Taste einmal wieder."&@CRLF&@CRLF&"Abbruch mit ""ESC"".")
While Not($Taste="ESC")
If TimerDiff($Warten)>400 Then $Taste=Key() ; Damit Tastenname im Tooltip lesbar
If $Taste<>False And TimerDiff($Warten)>401 Then $Warten = TimerInit()
ToolTip("Beispiel 1 - Tastenname: "&@CRLF&@CRLF&$Taste)
WEnd
While Not(Key(Default,"Loslassen"))
ToolTip("Bitte Taste wieder loslassen !")
WEnd
ToolTip("")
;Beispiel 2
MsgBox(0,"Key( ) - Beispiel 2/5","Key(""HEX"") - gibt den Hex-Code der gedrückten Taste einmal wieder."&@CRLF&@CRLF&"Abbruch mit ""ESC"".")
While Not($Taste="1B")
If TimerDiff($Warten)>400 Then $Taste=Key("HEX") ; Damit Tastenname im Tooltip lesbar
If $Taste<>"00" And TimerDiff($Warten)>401 Then $Warten = TimerInit()
ToolTip("Beispiel 2 - Hex-Code: "&@CRLF&@CRLF&$Taste)
WEnd
While Not(Key(Default,"Loslassen"))
ToolTip("Bitte Taste wieder loslassen !")
WEnd
ToolTip("")
;Beispiel 3
MsgBox(0,"Key( ) - Beispiel 3/5","Key( ""PAUSE"" ) - fragt ab, ob eine bestimmte Taste gedrückt ist,"&@CRLF&"in diesem Beispiel die Pause-Taste."&@CRLF&@CRLF&"Abbruch mit ""ESC"".")
While Not(Key("ESC"))
ToolTip("Beispiel 3 - Bitte die ""Pause""-Taste drücken ")
If Key("PAUSE") Then Beep(2000,200)
Sleep(2)
WEnd
While Not(Key(Default,"Loslassen"))
ToolTip("Bitte Taste wieder loslassen !")
WEnd
ToolTip("")
;Beispiel 4
MsgBox(0,"Key( ) - Beispiel 4/5","Key( , ""Standard"" ) - Standard-Repeat mit"&@CRLF&"800 msek Anschlag-Wiederholverzögerung"&@CRLF&"und einer Wiederholgeschwindigkeit von 200 msek."&@CRLF&@CRLF&"Abbruch mit ""ESC"".")
While Not($Taste="ESC")
$Taste=Key(Default,"Standard")
If $Taste Then Beep(2000,50)
WEnd
While Not(Key(Default,"Loslassen"))
ToolTip("Bitte Taste wieder loslassen !")
WEnd
ToolTip("")
$Taste = False
;Beispiel 5
MsgBox(0,"Key( ) - Beispiel 5/5","Key( , ""Doppelklick"" ) - überprüft, ob eine Taste in einem definierten Zeitraum"&@CRLF&"(hier 500 msek) nur einmal oder doppelt angeschlagen wurde."&@CRLF&@CRLF&"Abbruch mit ""ESC"".")
; Die Tasten "SHIFT", "STRG" und "ALT" machen hier etwas Probleme; vielleicht liegt das am Betriebssystem
While Not($Taste="ESC")
$Taste=Key(Default,"Doppelklick")
If StringLeft($Taste,12)="Doppelklick " Then Beep(3000,50)
WEnd
While Not(Key(Default,"Loslassen"))
ToolTip("Bitte Taste wieder loslassen !")
WEnd
ToolTip("")
Über Feedback und konstruktive Kritik würde ich mich freuen.