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
Zum testen der Geschwindigkeit (ist vielen wichtig):
Spoiler anzeigen
; #=================================================================================================#
; 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)
Eine Beispiel Schleife zum Verständniss:
Spoiler anzeigen
; #=================================================================================================#
; 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
Und die Func an sich:
Spoiler anzeigen
; #=================================================================================================#
; 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