_GetHexPressed()

  • Da ich öfter das Problem hatte Shift+Mausklicks & co gleichzeitig abzufragen
    hab ich die letzten tage eine kleine Func geschrieben die eigentlich mehr als gut funktioniert.
    Erweitern werde ich das ganze wohl auch noch, vlt sogar mit einem anderen Return ("{LMOUSE}" statt "01" etc)

    Die Func sollte sich eigentlich selbst erklären, bei Fragen einfach posten :P

    Zum testen der Geschwindigkeit (ist vielen wichtig):

    Spoiler anzeigen
    [autoit]

    ; #=================================================================================================#
    ; Name...........: _GetHexPressed() - Speed Example
    ; #=================================================================================================#
    #include <Timers.au3>
    $Timer = _Timer_Init()
    $Keys = _GetHexPressed(0)
    ConsoleWrite("_GetHexPressed() - String Output - Timer: " & _Timer_Diff($Timer) & @CRLF)
    $Timer = _Timer_Init()
    $Keys = _GetHexPressed(1)
    ConsoleWrite("_GetHexPressed() - Array Output - Timer: " & _Timer_Diff($Timer) & @CRLF)

    [/autoit]

    Eine Beispiel Schleife zum Verständniss:

    Spoiler anzeigen
    [autoit]

    ; #=================================================================================================#
    ; Name...........: _GetHexPressed() - Loop Example
    ; #=================================================================================================#
    While 1
    Switch _GetHexPressed(0)
    Case "11-12-2E-A2-A4" ;Strg/Alt/Entf
    ConsoleWrite("Tastmanager - Strg+Alt+Entf - 11-12-2E-A2-A4" & @CRLF)
    Case "10-41-42-A0" ;Shift+A+B
    ConsoleWrite("Shift+A+B - 10-41-42-A0" & @CRLF)
    Case "01-43" ; LeftMouse+C
    ConsoleWrite("LeftMouse+C - 01-43" & @CRLF)
    Case "01-10-11-A0-A2" ;Strg+Shift+LeftMouse
    ConsoleWrite("Strg+Shift+LeftMouse - 01-10-11-A0-A2" & @CRLF)
    EndSwitch
    Sleep(50)
    WEnd

    [/autoit]

    Und die Func an sich:

    Spoiler anzeigen
    [autoit]

    ; #=================================================================================================#
    ; Name...........: _GetHexPressed()
    ; Author ........: Sen // Christopher Klay
    ; Description ...: Returns a String / Array with the Hex Keys pressed
    ; Syntax.........: _GetHexPressed($Mode)
    ; Parameters ....: $Mode - 0 = String, 1 = Array (0 = Count)
    ; Return values .: $Mode = 0 -> String, based on "Value-Value-Value"
    ; $Mode = 1 -> Array, based on 0 = Size / 1+ = Hexkeys
    ; No Keys = 0
    ; #=================================================================================================#
    Func _GetHexPressed($Mode = 0)
    Dim $Keys[16] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"]
    Local $aCom[(UBound($Keys) ^ 2)]
    Local $i, $j, $k
    For $i = 0 To UBound($Keys) - 1
    For $j = 0 To UBound($Keys) - 1
    $aCom[$k] = $Keys[$i] & $Keys[$j]
    $k += 1
    Next
    Next
    Local $Return = ""
    Local $ReturnC = 0
    Local $user32 = DllOpen("user32.dll")
    For $i = 0 To UBound($aCom) - 1
    Local $a_R = DllCall($user32, "short", "GetAsyncKeyState", "int", '0x' & $aCom[$i])
    If @error Then Return SetError(@error, @extended, False)
    If BitAND($a_R[0], 0x8000) <> 0 Then
    $Return &= $aCom[$i] & "-"
    EndIf
    Next
    If $Return = 0 Then
    Return 0
    EndIf
    $Return = StringTrimRight($Return, 1)
    DllClose($user32)
    Switch $Mode
    Case 0
    Return $Return
    Case 1
    $Return = StringSplit($Return, "-", 1)
    Return $Return
    EndSwitch
    EndFunc ;==>_GetHexPressed

    [/autoit]