_getKeyKombi - gedrückte Taste(nkombination) ermitteln

  • 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
    [autoit]

    #include <Array.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;-----------------------------------------------------------------------------------------------------------------
    ; 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()

    [/autoit] [autoit][/autoit] [autoit]

    Local $i_keys_pressed_count = 0
    Local $s_keys_pressed = ""
    Local $as_return[1]

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    ;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

    [/autoit] [autoit][/autoit] [autoit]

    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 = "")

    [/autoit] [autoit][/autoit] [autoit]

    Local $as_return[2]
    Local $as_keys[39]
    $as_return[0] = 0
    $as_return[1] = ""

    [/autoit] [autoit][/autoit] [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Return $as_return

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_getKey

    [/autoit]


    _getKeyKombi_Example.au3

    Spoiler anzeigen
    [autoit]

    #include "_getKeyKombi.au3"

    [/autoit] [autoit][/autoit] [autoit]

    $as_keys = _getKeyKombi()
    _ArrayDisplay($as_keys, "Hex-Werte der Tasten-Kombi")

    [/autoit]


    Verbesserungsvorschläge sind natürlich willkommen.