Hallo zusammen,
ich hab eine Funktion geschrieben, die die gedrückte(n) Taste(n) zurückgibt.
Damit kann z.B. auch eine Tastenkombination wie Strg+A ermittelt werden.
Zurückgegeben werden die Hex-Werte der Tasten.
(Die Hex-Werte sind in der Hilfe von _isPressed() aufgelistet.)
_getKeyKombi.au3
Spoiler anzeigen
#include <Array.au3>
#include <Misc.au3>
;-----------------------------------------------------------------------------------------------------------------
; Function _getKeyKombi()
;
; Description Gibt die gedrückte Taste(nkombination) zurück, die gedrückt wurde.
; Die Funktion wartet solang, bis mind. eine Taste gedrückt und losgelassen wurde.
;
; Return Array mit n Elementen
; Array[0] Anzahl der gedrückten Tasten
; Array[1..n] gedrückte Taste(n) als Hex-Wert (Hex-Werte in Hilfe von _IsPressed() aufgelistet)
;
; Version 0.1
;
; Author zemkedesign (http://www.autoit.de/index.php?page=User&userID=200384)
;-----------------------------------------------------------------------------------------------------------------
Func _getKeyKombi()
Local $i_keys_pressed_count = 0
Local $s_keys_pressed = ""
Local $as_return[1]
While 1
;Anzahl und Tasten ermitteln
$as_array = _getKey($s_keys_pressed)
ConsoleWrite($s_keys_pressed & @CR)
;neue Taste gedrückt
If $as_array[0] > $i_keys_pressed_count Then $s_keys_pressed &= $as_array[1]
;aktuell weniger gedrückt, als im Durchlauf zuvor
If $as_array[0] < $i_keys_pressed_count Then ExitLoop
;aktuell gedrückte Tasten zwischenspeichern
$i_keys_pressed_count = $as_array[0]
WEnd
;Rückgabe
$as_return[0] = $i_keys_pressed_count ;Anzahl gedrückter Tasten
For $i = 1 To StringLen($s_keys_pressed) Step 2
_ArrayAdd($as_return, StringMid($s_keys_pressed, $i, 2)) ;Tasten teilen
Next
Return $as_return
EndFunc ;==>_getKeyKombi
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];-----------------------------------------------------------------------------------------------------------------
; Function _getKey([$s_ignored_keys = ""])
;
; Description Gibt die gedrückte Taste zurück, die momentan gedrückt ist.
; Ignoriert werden Tasten, die im Parameter gespeichert sind.
;
; Parameter optional $s_ignored_keys: zu ignorierende Tasten
;
; Return Erfolg Array mit zwei Elementen
; Array[0] Anzahl der gedrückten Tasten (ignorierte Tasten werden mitgezählt)
; Array[1] gedrückte Taste (ignorierte Tasten werden nicht zurückgegeben)
; Fehler keine Taste wurde gedrückt
; Array[0] 0
; Array[1] Leerstring
;
; Version 0.1
;
; Author zemkedesign (http://www.autoit.de/index.php?page=User&userID=200384)
;-----------------------------------------------------------------------------------------------------------------
Func _getKey($s_ignored_keys = "")
Local $as_return[2]
Local $as_keys[39]
$as_return[0] = 0
$as_return[1] = ""
#Region keys
$as_keys[0] = "10" ;SHIFT
$as_keys[1] = "11" ;CTRL
$as_keys[2] = "12" ;ALT
$as_keys[3] = "30" ;0
$as_keys[4] = "31" ;1
$as_keys[5] = "32" ;2
$as_keys[6] = "33" ;3
$as_keys[7] = "34" ;4
$as_keys[8] = "35" ;5
$as_keys[9] = "36" ;6
$as_keys[10] = "37" ;7
$as_keys[11] = "38" ;8
$as_keys[12] = "39" ;9
$as_keys[13] = "41" ;A
$as_keys[14] = "42" ;B
$as_keys[15] = "43" ;C
$as_keys[16] = "44" ;D
$as_keys[17] = "45" ;E
$as_keys[18] = "46" ;F
$as_keys[19] = "47" ;G
$as_keys[20] = "48" ;H
$as_keys[21] = "49" ;I
$as_keys[22] = "4A" ;J
$as_keys[23] = "4B" ;K
$as_keys[24] = "4C" ;L
$as_keys[25] = "4D" ;M
$as_keys[26] = "4E" ;N
$as_keys[27] = "4F" ;O
$as_keys[28] = "50" ;P
$as_keys[29] = "51" ;Q
$as_keys[30] = "52" ;R
$as_keys[31] = "53" ;S
$as_keys[32] = "54" ;T
$as_keys[33] = "55" ;U
$as_keys[34] = "56" ;V
$as_keys[35] = "57" ;W
$as_keys[36] = "58" ;X
$as_keys[37] = "59" ;Y
$as_keys[38] = "5A" ;Z
#EndRegion keys
For $i = 0 To UBound($as_keys) - 1
If _IsPressed($as_keys[$i]) Then
;Anzahl gedrückter Tasten erhöhen
$as_return[0] += 1
;Taste wurde noch nicht schon einmal gedrückt
If StringInStr($s_ignored_keys, $as_keys[$i]) = 0 Then $as_return[1] &= $as_keys[$i]
EndIf
Next
Return $as_return
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_getKey
[/autoit]
_getKeyKombi_Example.au3
Spoiler anzeigen
#include "_getKeyKombi.au3"
[/autoit] [autoit][/autoit] [autoit]$as_keys = _getKeyKombi()
_ArrayDisplay($as_keys, "Hex-Werte der Tasten-Kombi")
Verbesserungsvorschläge sind natürlich willkommen.