Tastenkombination aufzeichnen

  • Hallo zusammen,

    mit _IsPressed() kann ich prüfen, ob eine bestimmte Taste gedrückt wurde.
    Nun möchte ich gern ermitteln, welche Taste gedrückt wurde.

    Hintergrund ist, dass ich gern die gedrückte Taste(-nkombination) "aufnehmen" und einer Aktion zuordnen möchte.

    Mit _IsPressed() kann ich zwar alle Tasten nacheinander prüfen, ob diese gedrückt wurde. Aber wie schaut es z.B. mit Strg+A aus?

    Gibt es da eine UDF oder muss ich selbst ran?

    Gruß

    • Offizieller Beitrag

    Dazu 2 Antworten ;)
    1. Ja, es ist möglich. Aber da diese Anwendung dann problemlos als Keylogger mißbraucht werden könnte, werden wir hier im Forum den Code nicht posten. Ich hoffe, dafür hast du Verständnis.
    2. Lass doch den User mittels einer kleinen GUI den Hotkey festlegen:
    - Listbox mit allen Tasten
    - User wählt Taste, per Button wird diese zum HotKeystring zugefügt (Anzeige in einem Label)
    - User wählt nächste Taste... usw.
    - zum Schluß Übernahme Hotkey und Funktionszuweisung

  • zu 1) ja verstehe ich. Deswegen hab ich schon versucht klarzumachen, dass ich die Geschichte für ein "normales" Tool brauche.
    zu 2) per GUI gehts leider nicht, da die Tastenkombinationen nicht von der Tastatur kommen, sondern von einer Fernbedienung. Bei der Fernbedienung ist nicht klar, welche Taste simuliert wird, wenn man auf einen Knopf der Fernbedienung gedrückt wird.

    Dann muss ich doch allein ran.

  • Ich hab mich dann doch selbst rangemacht und rausgekommen ist folgendes:

    1) Script starten
    2) Tastenkombi (kann aus ALT, Strg, Shift, 0-9, A-Z bestehen) drücken und loslassen
    3) gedrückte Tastenkombi wird angezeigt.


    Spoiler anzeigen
    [autoit]

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

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

    $keys = get_key_kombi()
    _ArrayDisplay($keys, "Hex-Werte der Tasten-Kombi")

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

    Func get_key_kombi()

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

    Local $keys_pressed_count = 0
    Local $keys_pressed = ""
    Local $return[1]

    While 1

    ;Anzahl und Tasten ermitteln
    $array = get_key($keys_pressed)

    ;neue Taste gedrückt
    If $array[0] > $keys_pressed_count Then $keys_pressed &= $array[1]

    ;aktuell weniger gedrückt, als im Durchlauf zuvor
    If $array[0] < $keys_pressed_count Then ExitLoop

    ;aktuell gedrückte Tasten zwischenspeichern
    $keys_pressed_count = $array[0]

    WEnd

    ;Rückgabe
    $return[0] = $keys_pressed_count ;Anzahl gedrückter Tasten
    For $i = 1 To StringLen($keys_pressed) Step 2
    _ArrayAdd($return, StringMid($keys_pressed, $i, 2)) ;Tasten teilen
    Next

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

    Return $return

    EndFunc

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

    Func get_key($ignored_keys = "")

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

    Local $return[2]
    Local $keys[39]
    #Region keys

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

    $keys[0] = "10" ;{LSHIFT}"
    $keys[1] = "11" ;{LCTRL}"
    $keys[2] = "12" ;{ALT}"
    $keys[3] = "30" ;0"
    $keys[4] = "31" ;1"
    $keys[5] = "32" ;2"
    $keys[6] = "33" ;3"
    $keys[7] = "34" ;4"
    $keys[8] = "35" ;5"
    $keys[9] = "36" ;6"
    $keys[10] = "37" ;7"
    $keys[11] = "38" ;8"
    $keys[12] = "39" ;9"
    $keys[13] = "41" ;A"
    $keys[14] = "42" ;B"
    $keys[15] = "43" ;C"
    $keys[16] = "44" ;D"
    $keys[17] = "45" ;E"
    $keys[18] = "46" ;F"
    $keys[19] = "47" ;G"
    $keys[20] = "48" ;H"
    $keys[21] = "49" ;I"
    $keys[22] = "4A" ;J"
    $keys[23] = "4B" ;K"
    $keys[24] = "4C" ;L"
    $keys[25] = "4D" ;M"
    $keys[26] = "4E" ;N"
    $keys[27] = "4F" ;O"
    $keys[28] = "50" ;P"
    $keys[29] = "51" ;Q"
    $keys[30] = "52" ;R"
    $keys[31] = "53" ;S"
    $keys[32] = "54" ;T"
    $keys[33] = "55" ;U"
    $keys[34] = "56" ;V"
    $keys[35] = "57" ;W"
    $keys[36] = "58" ;X"
    $keys[37] = "59" ;Y"
    $keys[38] = "5A" ;Z"

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

    #EndRegion

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

    For $i = 0 To 38
    If _IsPressed($keys[$i]) Then
    ;Anzahl gedrückter Tasten erhöhen
    $return[0] += 1
    ;Taste wurde noch nicht schon einmal gedrückt
    If StringInStr($ignored_keys, $keys[$i]) = 0 Then $return[1] &= $keys[$i]
    EndIf
    Next

    Return $return

    EndFunc

    [/autoit]