Raw Input Data lesen

  • Hallo,

    hat jemand von euch vielleicht eine Ahnung, wie man mit AutoIt die "Raw Input Data" der Tastatur abfragen kann. In einem englischsprachigen Forum hat schon mal jemand danach gefragt (http://www.autoitscript.com/forum/topic/21…ting-raw-input/), aber es ist leider nichts dabei rausgekommen.

    Ich würde gerne ein kleines Programm schreiben, welches es den von Logitech verarschten Kunden (so wie ich einer bin) ermöglicht, die Sondertasten ihrer teuren Tastaturen auch noch unter Windows 7 nutzen zu können (wie Logitech das mal versprochen - aber nie eingehalten hat :thumbdown: ). Das gilt natürlich auch für alle anderen nicht mehr unterstützen Marken/Tastaturen. Ich habe jetzt schon sehr lange gewartet, die einschlägigegn Foren gewälzt und diverse Ansätze (inkl. von anderen Leuten entwickelte Software) ausprobiert - es nützt nichts: das Keybord bleibt beschnitten. Ich will es aber nicht wegschmeißen, ich stehe einfach noch voll drauf.

    Also, falls jemand eine Idee hat, dann bitte, bitte her damit :D ...

    Danke und Gruß
    Trainer

    P.S. Hier der Ansatz der im englischsprachigen Forum gepostet wurde:

    Spoiler anzeigen
    [autoit]

    Const $RIDI_DEVICENAME = 0x20000007
    Const $RID_INPUT = 0x10000003
    Const $RID_HEADER = 0x10000005
    $ridl=DllStructCreate("dword;dword")
    $numdevices=DllStructCreate("int")
    $temp=DllCall("user32.dll","long","GetRawInputDeviceList","ptr",0,"ptr",DllStructGetPtr($numdevices),"long",DllStructGetSize($ridl))
    ;MsgBox(0,"Call Return:",$temp)
    $devnum = DllStructGetData($numdevices,1)
    MsgBox(0,"Number of Devices:",$devnum)
    ;Dim $rid[4]
    $temp = ""
    For $i = 1 to ($devnum-1)
    $temp=$temp & "dword;dword;"
    Next
    $temp = $temp & "dword;dword"
    ;MsgBox(0,"Structure:",$temp)
    $rid=DllStructCreate($temp)
    $dwsize = $numdevices * DllStructGetSize($ridl)
    $temp=DllCall("user32.dll","long","GetRawInputDeviceList","ptr",DllStructGetPtr($rid),"ptr",DllStructGetPtr($numdevices),"long",DllStructGetSize($ridl))
    ;MsgBox(0,"Call Return:",$temp)
    For $i = 0 to ($devnum-1)
    $devname=DllStructCreate("char[256]")
    $size=DllStructCreate("dword")
    DllStructSetData($size,1,256)
    DllCall("user32.dll","long","GetRawInputDeviceInfo","long",DllStructGetData($rid,($i*2)+1),"int",$RIDI_DEVICENAME,"ptr",DllStructGetPtr($devname),"ptr",DllStructGetPtr($size))
    MsgBox(0,"Device: " & $i, "Handle: " & DllStructGetData($rid,($i*2)+1) & " Type: " & DllStructGetData($rid,($i*2)+2) & " Name: " & DllStructGetData($devname,1))
    If StringInStr(DllStructGetData($devname,1),"Vid_0925") <> 0 Then;works up to here
    MsgBox(0,"Score!","Playstation 2 Dvd Remote Found!")
    $remotehwnd = DllStructGetData($rid,($i*2)+1)
    $i = 99
    EndIf
    Next
    $size=0;DllStructCreate("dword")
    $RawInputHeader=DllStructCreate("dword;dword;dword;dword")
    $RawInput=DllStructCreate("dword;dword;dword;dword;dword;dword;byte[256]")
    MsgBox(0,"Size:",DllStructGetData($size,1))
    ;here's the call that i can't get working
    $temp = DllCall("user32.dll","int","GetRawInputData", _
    "long",$remotehwnd,"int",$RID_HEADER, _
    "ptr",0,"long",$size, _
    "long",DllStructGetSize($RawInputHeader) )
    $ourError = DLLCall("kernel32.dll","int","GetLastError")
    MsgBox(0,"Error:",$ourError)
    MsgBox(0,"Call Return:",$temp)
    MsgBox(0,"Size:",DllStructGetData($size,1))
    For $i = 1 to 7
    MsgBox(0,"Data Lister:",DllStructGetData($RawInput,$i))
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hi ProgAndy,

    manche Tastaturen funktionieren sicher noch, das stimmt schon. Aber z.B. das "Logitech Cordless MX Duo" definitiv nicht mehr (das habe ich nämlich :rolleyes: ) - das hat mir Logitech in einer Mail bestätigt. Und daran wird sich laut deren Aussage auch nichts mehr ändern - obwohl sie das bei der Einführung mal anders gesehen haben (http://www.chip.de/news/Logitech-…d_34146296.html).

    Das "uberoptions-Tool" hört sich allerdings SEHR interessant an - das schaue ich mir mal an. Vielleicht ist das ja bereits die Lösung! Danke für den Tip.

    Gruß
    Trainer