Jump to content

(HID) Human Interface Device Communications in XP


Recommended Posts

I think you can add _GetRawInputDeviceInfo() call there with the device name handle and $iCommand set to $RIDI_DEVICENAME. According to the output of the device list on your machine there are a raw input port for keyboard and the remote raw input device entries. See if you still get same results. I think they should be different.

Edit: ... On a second thought, I think Microsoft just use your keyboard device as the remote's medium which makes me to think that you'll actually see the same device entry for two different - separated devices..

Edit2: But this can be interesting, you've posted it previously:

rid[0].usUsagePage = 0xFFBC;      // adds HID remote control
   rid[0].usUsage = 0x88;
   rid[0].dwFlags = RIDEV_INPUTSINK;
   rid[0].hwndTarget = this.Handle;

   rid[1].usUsagePage = 0x0C;     // adds HID remote control
   rid[1].usUsage = 0x01;
   rid[0].dwFlags = RIDEV_INPUTSINK;
   rid[0].hwndTarget = this.Handle;

   rid[2].usUsagePage = 0x0C;     // adds HID remote control
   rid[2].usUsage = 0x80;
   rid[0].dwFlags = RIDEV_INPUTSINK;
   rid[0].hwndTarget = this.Handle;

You can try one or all of them at once. All of them at once may require you to do the StringRegExpReplace loop as with the _GetRawInputDeviceList().

Edited by Authenticity
Link to comment
Share on other sites

  • Replies 75
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Ok I figured it out, I google search linked me to something similiar on AutoHotKey.

They had a cool tool that gave you all kinds of info on all your HID devices and monitored incoming data in a GUI.

Here's a link you might find it useful sometime: http://www.autohotkey.com/forum/viewtopic....asc&start=0

So to do this I only need two pieces of info VKey and VendorId.

Apperantly my remote always returns vendorID 81.

But I'm having trouble getting the vendorID. Heres what I've got but vendorID always comes back as 0

#Region;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <RawInput.au3>
#include <WinAPI.au3>
HotKeySet('{ESC}', '_EXIT')

Global $tRID_KD, $pRID_KD, $iRID_KD
Global $tRIH, $iRIH
Global $iNumDevices
Global $hGUI , $pData

$hGUI = GUICreate('Test', 100, 100)
GUIRegisterMsg($WM_INPUT, 'OnInput')

$tRID_KD = DllStructCreate($tagRAWINPUTDEVICE)
$pRID_KD = DllStructGetPtr($tRID_KD)
$iRID_KD = DllStructGetSize($tRID_KD)

$tRIH = DllStructCreate($tagRAWINPUTHEADER)
$iRIH = DllStructGetSize($tRIH)

$iNumDevices = 1

DllStructSetData($tRID_KD, 'usUsagePage', 0x01)
DllStructSetData($tRID_KD, 'usUsage', 0x06)
DllStructSetData($tRID_KD, 'dwFlags', BitOR($RIDEV_NOLEGACY, $RIDEV_INPUTSINK))
DllStructSetData($tRID_KD, 'hwndTarget', $hGUI)

_RegisterRawInputDevices($pRID_KD, $iNumDevices, $iRID_KD)

While 1
    Sleep(20)
WEnd

GUIDelete()

Func OnInput($hwnd, $iMsg, $iwParam, $ilParam)
    Local $tRI_KD, $pRI_KD, $iRI_KB
    Local $iSize
    
    $tRI_KD = DllStructCreate($tagRAWINPUT_KEYBOARD)
    $pRI_KD = DllStructGetPtr($tRI_KD)
    $iRI_KB = DllStructGetSize($tRI_KD)
    _GetRawInputData($ilParam, $RID_INPUT, $pRI_KD, $iRI_KB, $iRIH)
    If Not @error Then
        ConsoleWrite(DllStructGetData($tRI_KD, 'VKey') & @CR)
        MsgBox(0, "VKey", DllStructGetData($tRI_KD, 'VKey') )
    EndIf

    $tRI_KD = 0
    $tRI_KD = DllStructCreate($tagRID_DEVICE_INFO_HID)
    $pRI_KD = DllStructGetPtr($tRI_KD)
    $iRI_KB = DllStructGetSize($tRI_KD)
    _GetRawInputDeviceInfo($hwnd, $RIDI_DEVICEINFO, $pRI_KD, $iRI_KB)
    If Not @error Then
        ConsoleWrite(DllStructGetData($tRI_KD, 'dwVendorId') & @CR)
        MsgBox(0, "dwVendorId", DllStructGetData($tRI_KD, 'dwVendorId') )
    EndIf
    
    $tRI_KD = 0
    Return 'GUI_RUNDEFMSG'
EndFunc

Func _EXIT()
    GUIDelete()
    Exit
EndFunc

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

You need to assign to struct size to the cbSize member of the struct, then you'll use this size also in the function call:

;.
;..
;...
$tRI_KD = 0
$tRI_KD = DllStructCreate($tagRID_DEVICE_INFO_HID)
$pRI_KD = DllStructGetPtr($tRI_KD)
$iRI_KB = DllStructGetSize($tRI_KD)
DllStructSetData($tRI_KD, 'cbSize', $iRI_KD) ; 8)

_GetRawInputDeviceInfo($ilParam, $RIDI_DEVICEINFO, $pRI_KD, $iRI_KB) ; Was $hwnd 8)
If Not @error Then
ConsoleWrite(DllStructGetData($tRI_KD, 'dwVendorId') & @CR)
MsgBox(0, "dwVendorId", DllStructGetData($tRI_KD, 'dwVendorId') )
EndIfoÝ÷ Ù±ßÛN¼­+,r¸©µ©ízYfz'ò¢çǶzwh¬Oj±¨z׺Ú"µÍÚ[ÛYH  Ô]Ò[]]LÉÝÂ[H   ÌÍÝQ ÌÍÚTQ[H  ÌÍÝY ÌÍÜY[H   ÌÍÝQWÓSÕTÑK   ÌÍÜQWÓSÕTÑK   ÌÍÚTQWÓSÕTÑB[H    ÌÍÝQWÒÑVPÐT   ÌÍÜQWÒÑVPÐT   ÌÍÚTQWÒÑVPÐT[H    ÌÍÝQWÒQ ÌÍÜQWÒQ ÌÍÚTQWÒQ[H  ÌÍÝYÔQ[H    ÌÍÚS[Q]XÙÂÌÍÝQHÝXÝÜX]J   ÌÍÝYÔUÒSUUPÑSTÕ
BÌÍÚTQHÝXÝÙ]Ú^J  ÌÍÝQ
BÌÍÝYÔQH    ÌÎNÉÌÎNÂÑÙ]]Ò[]]XÙSÝ
    ÌÍÚS[Q]XÙË ÌÍÚTQ
BYÝÜ[ ÌÍÚS[Q]XÙÈ ÝÈ[QÜ    ÌÍÚHHÈ  ÌÍÚS[Q]XÙËLBBIÌÍÝYÔQ   [ÏHÝ[ÔYÑ^XÙJ   ÌÍÝYÔUÒSUUPÑSTÕ  ÌÎNÊ ÌLÝÊÊNÉÌÎNË ÌÎNÉÌÍÞÌ_IÌÎNÈ    [È ÌÍÚH [È ÌÎNÎÉÌÎNÊBS^IÌÍÝYHÝXÝÜX]J  ÌÍÝYÔQ
BIÌÍÜYHÝXÝÙ]  ÌÍÝYBWÑÙ]]Ò[]]XÙSÝ
    ÌÍÜY ÌÍÚS[Q]XÙË ÌÍÚTQ
BRYÝÜ[BQÜ    ÌÍÚHHÈ  ÌÍÚS[Q]XÙËLBBBTÝÚ]ÚÝXÝÙ]]J   ÌÍÝY ÌÎNÙÕIÌÎNÈ   [È ÌÍÚJBBBBPØÙH   ÌÍÔSWÕTSSÕTÑBBBBBIÌÍÝQWÓSÕTÑHHÝXÝÜX]J    ÌÍÝYÔQUPÑRS×ÓSÕTÑJBBBBBIÌÍÜQWÓSÕTÑHHÝXÝÙ] ÌÍÝQWÓSÕTÑJBBBBBIÌÍÚTQWÓSÕTÑHHÝXÝÙ]Ú^J  ÌÍÝQWÓSÕTÑJBBBBBQÝXÝÙ]]J   ÌÍÝQWÓSÕTÑK   ÌÎNØØÚ^IÌÎNË    ÌÍÚTQWÓSÕTÑJBBBBBQÝXÝÙ]]J  ÌÍÝQWÓSÕTÑK   ÌÎNÙÕIÌÎNË   ÌÍÔSWÕTSSÕTÑJBBBBBBBBBBWÑÙ]]Ò[]]XÙR[ÊÝXÝÙ]]J  ÌÍÝY ÌÎNÚ]XÙIÌÎNÈ [È ÌÍÚJK    ÌÍÔQWÑUPÑRSË  ÌÍÜQWÓSÕTÑK   ÌÍÚTQWÓSÕTÑJBBBBBPÛÛÛÛUÜ]JÑÙ]]XÙR[Ê  ÌÍÝQWÓSÕTÑJH  [ÈBBBBBIÌÍÝQWÓSÕTÑHHBBBBBBBBPØÙH   ÌÍÔSWÕTRÑVPÐTBBBBIÌÍÝQWÒÑVPÐTHÝXÝÜX]J    ÌÍÝYÔQUPÑRS×ÒÑVPÐT
BBBBBIÌÍÜQWÒÑVPÐTHÝXÝÙ]    ÌÍÝQWÒÑVPÐT
BBBBBIÌÍÚTQWÒÑVPÐTHÝXÝÙ]Ú^J   ÌÍÝQWÒÑVPÐT
BBBBBQÝXÝÙ]]J    ÌÍÝQWÒÑVPÐT   ÌÎNØØÚ^IÌÎNË    ÌÍÚTQWÒÑVPÐT
BBBBBQÝXÝÙ]]J    ÌÍÝQWÒÑVPÐT   ÌÎNÙÕIÌÎNË   ÌÍÔSWÕTRÑVPÐT
BBBBBBBBBBWÑÙ]]Ò[]]XÙR[ÊÝXÝÙ]]J ÌÍÝY ÌÎNÚ]XÙIÌÎNÈ [È ÌÍÚJK    ÌÍÔQWÑUPÑRSË  ÌÍÜQWÒÑVPÐT   ÌÍÚTQWÒÑVPÐT
BBBBBPÛÛÛÛUÜ]JÑÙ]]XÙR[Ê    ÌÍÝQWÒÑVPÐT
H   [ÈBBBBBIÌÍÝQWÒÑVPÐTHBBBBBBBBPØÙH   ÌÍÔSWÕTRQBBBBIÌÍÝQWÒQHÝXÝÜX]J    ÌÍÝYÔQUPÑRS×ÒQ
BBBBBIÌÍÜQWÒQHÝXÝÙ]  ÌÍÝQWÒQ
BBBBBIÌÍÚTQWÒQHÝXÝÙ]Ú^J ÌÍÝQWÒQ
BBBBBQÝXÝÙ]]J    ÌÍÝQWÒQ ÌÎNØØÚ^IÌÎNË    ÌÍÚTQWÒQ
BBBBBQÝXÝÙ]]J    ÌÍÝQWÒQ ÌÎNÙÕIÌÎNË   ÌÍÔSWÕTRQ
BBBBBBBBBBWÑÙ]]Ò[]]XÙR[ÊÝXÝÙ]]J ÌÍÝY ÌÎNÚ]XÙIÌÎNÈ [È ÌÍÚJK    ÌÍÔQWÑUPÑRSË  ÌÍÜQWÒQ ÌÍÚTQWÒQ
BBBBBPÛÛÛÛUÜ]JÑÙ]]XÙR[Ê    ÌÍÝQWÒQ
H   [ÈBBBBBIÌÍÝQWÒQHBBQ[ÝÚ]ÚBS^BBBIÌÍÝYHQ[Y[Y[ÈÑÙ]]XÙR[ÊTY  ÌÍÝÝXÝ
BSØØ[ ÌÍÜÓÙÂBTÝÚ]ÚÝXÝÙ]]J ÌÍÝÝXÝ ÌÎNÙÕIÌÎNÊBBPØÙH   ÌÍÔSWÕTSSÕTÑBBBIÌÍÜÓÙÈH ÌÎNËS[ÝÙH[ÎÌÎNÈ    [È [ÈP    [È ÌÎNÒQ    ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÒY  ÌÎNÊH    [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÓ[XÙ]ÛΠ   ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÓ[XÙ]ÛÉÌÎNÊH  [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÔØ[H]N   ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÔØ[T]IÌÎNÊH [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÒÜ^Û[ÚY[   ÌÎNÂBBRYÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÒÜ^Û[ÚY[ ÌÎNÊH[BBBIÌÍÜÓÙÈ   [ÏH    ÌÎNÔÙ[  ÌÎNÂBBQ[ÙBBBBIÌÍÜÓÙÈ  [ÏH    ÌÎNÓÝÙ[    ÌÎNÂBBQ[YBBIÌÍÜÓÙÈ [ÏH    [È ÌÎNËOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOIÌÎNÈ   [ÈBBBBPØÙH   ÌÍÔSWÕTRÑVPÐTBBIÌÍÜÓÙÈH ÌÎNËRÙ^XØ[ÎÌÎNÈ    [È [ÈP    [È ÌÎNÒÙ^XØN  ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÕIÌÎNÊH  [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÒÙ^XØÝXN   ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÔÝXIÌÎNÊH   [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÒÙ^XØ[ÙN   ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÒÙ^XØ[ÙIÌÎNÊH [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÓ[XÙ[Ý[ÛÙ^Π ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÓ[XÙ[Ý[ÛÙ^ÉÌÎNÊH    [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÓ[XÙQ[XØ]ÜÎ   ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÓ[XÙ[XØ]ÜÉÌÎNÊH  [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÕÝ[[XÙÙ^Î ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÓ[XÙÙ^ÕÝ[   ÌÎNÊH    [ÈBBIÌÍÜÓÙÈ  [ÏH    ÌÎNËOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOIÌÎNÈ   [ÈBBBBPØÙH   ÌÍÔSWÕTRQBBIÌÍÜÓÙÈH   ÌÎNËRQ[ÎÌÎNÈ [È [ÈP    [È ÌÎNÕ[ÜQ ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÕ[ÜY   ÌÎNÊH    [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÔÙXÝQ   ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÔÙXÝY ÌÎNÊH    [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÕÚ[Û[X  ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÙÕÚ[Û[XÌÎNÊH    [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÕÜ[][ÛÛXÝ[ÛØYÙHYÙN    ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÝÕØYÙTYÙIÌÎNÊH [ÈBBIÌÍÜÓÙÈ  [ÏHP   [È ÌÎNÕÜ[][ÛÛXÝ[ÛØYÙN    ÌÎNÈ [ÈÝXÝÙ]]J   ÌÍÝÝXÝ ÌÎNÝÕØYÙIÌÎNÊH [ÈBBIÌÍÜÓÙÈ  [ÏH    ÌÎNËOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOIÌÎNÈ   [ÈQ[ÝÚ]ÚBT] ÌÍÜÓÙÂ[[
Edited by Authenticity
Link to comment
Share on other sites

I copied the vendor ID line to the keyboard section. But it return a vendorID of 0 for all keyboard devices.

I was told that technically keyboards don't have VednorID's but this other one somehow gets it.

I don't know if it helps you or not but I mostly converted the short script and UDF that works.

I only had trouble with a few lines.

EDIT- I meant my attempt to convert the AHK script that is able to get the vendor ID.

I'm attaching the original in a rar file.

-Kenny

Here are the problem lines:

AHKHID.AU3

Lines 21-47

Lines 176-188

Lines 209-274

Lines 290-301

Lines 327

Lines 336

Lines 346

Lines 361

Lines 365-366

Lines 371

Lines 377-393

MCE.AU3

Lines 20

Script:

;Must be in auto-execute section if I want to use the constants
#Include <AHKHID.au3>

$AppActive = 1
$hGUI = GUICreate("");Create GUI to receive messages

;Intercept WM_INPUT messages
$WM_INPUT = 0xFF
GUIRegisterMsg($WM_INPUT, "InputMsg")

;Register Remote Control with RIDEV_INPUTSINK (so that data is received even in the background)
$r = HID_Register(1, 6, $hGui, $RIDEV_INPUTSINK)

;Prefix loop
While 1
    Sleep(1000)
WEnd
Exit

Func InputMsg($wParam, $lParam);SHOULD BE MORE PARMS SHOULDN'T IT???
    Local $devh, $iKey, $sLabel
   
  ;Get handle of device
    $devh = HID_GetInputInfo($lParam, $II_DEVHANDLE)
  ;Check for error
    If $devh <> -1 And HID_GetDevInfo($devh, $DI_HID_VENDORID, True) <> 81 Then
      ;Get data
        $iKey = HID_GetInputInfo($lParam, $II_KBD_VKEY);Get Vkey code
        MsgBox (0, "", $iKey)
       
        If $iKey = 114 Then
            If $AppActive = 1 Then
                $AppActive = 0
            Else
                $AppActive = 1   
            EndIf
            MsgBox "F3 Hit"
        Else
            If $AppActive = 1 Then Run("rundll32.exe user32.dll`,LockWorkStation`")
        EndIf
    EndIf
EndFunc

UDF:

$DI_DEVTYPE               = 4  ;Type of the device. See RIM_ constants.

$DI_MSE_ID                 = 8  ;ID for the mouse device.
$DI_MSE_NUMBEROFBUTTONS   = 12 ;Number of buttons for the mouse.
$DI_MSE_SAMPLERATE         = 16 ;Number of data points per second. This information may not be applicable for every
                                  ;mouse device.
$DI_MSE_HASHORIZONTALWHEEL   = 20 ;Vista only: TRUE if the mouse has a wheel for horizontal scrolling; otherwise, FALSE.

$DI_KBD_TYPE                 = 8  ;Type of the keyboard. 
$DI_KBD_SUBTYPE           = 12 ;Subtype of the keyboard. 
$DI_KBD_KEYBOARDMODE         = 16 ;Scan code mode. 
$DI_KBD_NUMBEROFFUNCTIONKEYS = 20 ;Number of function keys on the keyboard.
$DI_KBD_NUMBEROFINDICATORS   = 24 ;Number of LED indicators on the keyboard.
$DI_KBD_NUMBEROFKEYSTOTAL   = 28 ;Total number of keys on the keyboard. 

$DI_HID_VENDORID             = 8  ;Vendor ID for the HID.
$DI_HID_PRODUCTID           = 12 ;Product ID for the HID. 
$DI_HID_VERSIONNUMBER       = 16 ;Version number for the HID. 
;CONVERT===================================================================================
$DI_HID_USAGEPAGE           = 20 | 0x0100;Top-level collection Usage Page for the device.
$DI_HID_USAGE               = 22 | 0x0100;Top-level collection Usage for the device.
;_____________________________________
;Flags you can use in HID_GetInputInfo
$II_DEVTYPE       = 0  ;Type of the device generating the raw input data. See RIM_ constants.
$II_DEVHANDLE       = 8  ;Handle to the device generating the raw input data.

$II_MSE_FLAGS       = 16 | 0x0100;Mouse state. This member can be any reasonable combination of the following values
                                  ; -> see MOUSE constants.
$II_MSE_BUTTONFLAGS  = 20 | 0x0100;Transition state of the mouse buttons. This member can be one or more of the following
                                  ;values -> see RI_MOUSE constants.
$II_MSE_BUTTONDATA   = 22 | 0x1100;If usButtonFlags is RI_MOUSE_WHEEL, this member is a signed value that specifies the
                                  ;wheel delta.
$II_MSE_RAWBUTTONS   = 24        ;Raw state of the mouse buttons. 
$II_MSE_LASTX       = 28 | 0x1000;Motion in the X direction. This is signed relative motion or absolute motion,
                                  ;depending on the value of usFlags.
$II_MSE_LASTY       = 32 | 0x1000;Motion in the Y direction. This is signed relative motion or absolute motion,
                                  ;depending on the value of usFlags. 
$II_MSE_EXTRAINFO   = 36         ;Device-specific additional information for the event. 

$II_KBD_MAKECODE     = 16 | 0x0100;Scan code from the key depression. The scan code for keyboard overrun is
                                  ;KEYBOARD_OVERRUN_MAKE_CODE.
$II_KBD_FLAGS       = 18 | 0x0100;Flags for scan code information. It can be one or more of the following values
                                  ;-> see RI_KEY constants.
$II_KBD_VKEY         = 22 | 0x0100;Microsoft Windows message compatible virtual-key code.
;==========================================================================================
$II_KBD_MSG       = 24       ;Corresponding window message, for example WM_KEYDOWN, WM_SYSKEYDOWN, and so forth.
$II_KBD_EXTRAINFO   = 28         ;Device-specific additional information for the event.

$II_HID_SIZE         = 16        ;Size, in bytes, of each HID input in bRawData.
$II_HID_COUNT       = 20         ;Number of HID inputs in bRawData.

;DO NOT USE WITH HID_GetInputInfo. Use HID_GetInputData instead to retrieve the raw data.
$II_HID_DATA         = 24        ;Raw input data as an array of bytes.
;__________________________________________________________________________________
;Device type values returned by HID_GetDevType as well as DI_DEVTYPE and II_DEVTYPE
;http://msdn.microsoft.com/en-us/library/ms645568
$RIM_TYPEMOUSE     = 0  ;The device is a mouse.
$RIM_TYPEKEYBOARD   = 1  ;The device is a keyboard.
$RIM_TYPEHID         = 2  ;The device is an Human Interface Device (HID) that is not a keyboard and not a mouse.
;_______________________________________________________________________________________________
;Different flags for RAWINPUTDEVICE structure (to be used with HID_AddRegister and HID_Register)
;http://msdn.microsoft.com/en-us/library/ms645565
$RIDEV_REMOVE       = 0x00000001 ;If set, this removes the top level collection from the inclusion list. This tells the
                                  ;operating system to stop reading from a device which matches the top level collection.
$RIDEV_EXCLUDE     = 0x00000010 ;If set, this specifies the top level collections to exclude when reading a complete
                                  ;usage page. This flag only affects a TLC whose usage page is already specified with
                                  ;RIDEV_PAGEONLY.
$RIDEV_PAGEONLY   = 0x00000020 ;If set, this specifies all devices whose top level collection is from the specified
                                  ;usUsagePage. Note that usUsage must be zero. To exclude a particular top level
                                  ;collection, use RIDEV_EXCLUDE.
$RIDEV_NOLEGACY   = 0x00000030 ;If set, this prevents any devices specified by usUsagePage or usUsage from generating
                                  ;legacy messages. This is only for the mouse and keyboard. See Remarks.
$RIDEV_INPUTSINK     = 0x00000100 ;If set, this enables the caller to receive the input even when the caller is not in
                                  ;the foreground. Note that hwndTarget must be specified.
$RIDEV_CAPTUREMOUSE  = 0x00000200 ;If set, the mouse button click does not activate the other window.
$RIDEV_NOHOTKEYS     = 0x00000200 ;If set, the application-defined keyboard device hotkeys are not handled. However, the
                                  ;system hotkeys; for example, ALT+TAB and CTRL+ALT+DEL, are still handled. By default,
                                  ;all keyboard hotkeys are handled. RIDEV_NOHOTKEYS can be specified even if
                                  ;RIDEV_NOLEGACY is not specified and hwndTarget is NULL.
$RIDEV_APPKEYS     = 0x00000400 ;Microsoft Windows XP Service Pack 1 (SP1): If set, the application command keys are
                                  ;handled. RIDEV_APPKEYS can be specified only if RIDEV_NOLEGACY is specified for a
                                  ;keyboard device.
$RIDEV_EXINPUTSINK   = 0x00001000 ;Vista only: If set, this enables the caller to receive input in the background only if
                                  ;the foreground application does not process it. In other words, if the foreground
                                  ;application is not registered for raw input, then the background application that is
                                  ;registered will receive the input.
;__________________________________________________
;Different values of wParam in the WM_INPUT message
;http://msdn.microsoft.com/en-us/library/ms645590
$RIM_INPUT     = 0  ;Input occurred while the application was in the foreground. The application must call
                      ;DefWindowProc so the system can perform cleanup.
$RIM_INPUTSINK   = 1  ;Input occurred while the application was not in the foreground. The application must call
                      ;DefWindowProc so the system can perform the cleanup.
;__________________________________
;Flags for GetRawInputData API call
;http://msdn.microsoft.com/en-us/library/ms645596
$RID_INPUT  = 0x10000003  ;Get the raw data from the RAWINPUT structure.
$RID_HEADER = 0x10000005  ;Get the header information from the RAWINPUT structure.
;_____________________________________
;Flags for RAWMOUSE (part of RAWINPUT)
;http://msdn.microsoft.com/en-us/library/ms645578

;Flags for the II_MSE_FLAGS member
$MOUSE_MOVE_RELATIVE         = 0;Mouse movement data is relative to the last mouse position.
$MOUSE_MOVE_ABSOLUTE         = 1;Mouse movement data is based on absolute position.
$MOUSE_VIRTUAL_DESKTOP     = 0x02;Mouse coordinates are mapped to the virtual desktop (for a multiple monitor system)
$MOUSE_ATTRIBUTES_CHANGED   = 0x04;Mouse attributes changed; application needs to query the mouse attributes.

;Flags for the II_MSE_BUTTONFLAGS member
$RI_MOUSE_LEFT_BUTTON_DOWN   = 0x0001 ;Self-explanatory
$RI_MOUSE_LEFT_BUTTON_UP     = 0x0002 ;Self-explanatory
$RI_MOUSE_RIGHT_BUTTON_DOWN  = 0x0004 ;Self-explanatory
$RI_MOUSE_RIGHT_BUTTON_UP   = 0x0008 ;Self-explanatory
$RI_MOUSE_MIDDLE_BUTTON_DOWN = 0x0010 ;Self-explanatory
$RI_MOUSE_MIDDLE_BUTTON_UP   = 0x0020 ;Self-explanatory
$RI_MOUSE_BUTTON_4_DOWN   = 0x0040 ;XBUTTON1 changed to down.
$RI_MOUSE_BUTTON_4_UP       = 0x0080 ;XBUTTON1 changed to up.
$RI_MOUSE_BUTTON_5_DOWN   = 0x0100 ;XBUTTON2 changed to down.
$RI_MOUSE_BUTTON_5_UP       = 0x0200 ;XBUTTON2 changed to up.
$RI_MOUSE_WHEEL           = 0x0400 ;Raw input comes from a mouse wheel. The wheel delta is stored in usButtonData.
;____________________________________________
;Flags for the RAWKEYBOARD (part of RAWINPUT)
;http://msdn.microsoft.com/en-us/library/ms645575

;Flag for the II_KBD_MAKECODE member in the event of a keyboard overrun
$KEYBOARD_OVERRUN_MAKE_CODE  = 0xFF

;Flags for the II_KBD_FLAGS member
$RI_KEY_MAKE             = 0
$RI_KEY_BREAK           = 1
$RI_KEY_E0             = 2
$RI_KEY_E1             = 4
$RI_KEY_TERMSRV_SET_LED  = 8
$RI_KEY_TERMSRV_SHADOW   = 0x10
;____________________________________

;FUNCTIONS ==========================
Func HID_Initialize($bRefresh = False)
    Local $uHIDList, $bInitialized = False, $iCount
    
    If $bInitialized And Not $bRefresh Then Return $uHIDList
    
  ;Get the device count
    $r = DllCall("GetRawInputDeviceList", "UInt", 0, "UInt*", $iCount, "UInt", 8)
    
  ;Check for error
    If $r = -1 Or @error Then Return -1
    
  ;Prep var
    Local $uHIDList[$iCount * 8]
    $r = DllCall("GetRawInputDeviceList", "UInt", $uHIDList, "UInt*", $iCount, "UInt", 8)
    If $r = -1 Or @error Then Return -1
    
    $bInitialized := True
    Return $uHIDList
EndFunc

Func HID_GetDevCount()
    Local $iCount
  ;Get the device count
    $r = DllCall("GetRawInputDeviceList", "UInt", 0, "UInt*", $iCount, "UInt", 8)
    
  ;Check for error
    If $r = -1 Or @error Then
        Return -1
    Else
        Return $iCount
    EndIf
EndFunc

Func HID_GetDevHandle($i)
    Return NumGet(HID_Initialize(), ($i - 1) * 8)
EndFunc
;TO CONVERT==============================================================================
Func HID_GetDevIndex($Handle)
    Loop % HID_GetDevCount()
        If (NumGet(HID_Initialize(), (A_Index - 1) * 8) = Handle)
            Return A_Index
    Return 0
EndFunc

Func HID_GetDevType($i, $IsHandle = False)
    Return Not IsHandle ? NumGet(HID_Initialize(), ((i - 1) * 8) + 4)
    : NumGet(HID_Initialize(), ((HID_GetDevIndex(i) - 1) * 8) + 4)
EndFunc
;========================================================================================
Func HID_GetDevName($i, $IsHandle = False)
    $RIDI_DEVICENAME := 0x20000007
    
  ;Get index if i is handle
    Local $h
    If IsHWnd($i) Then $h = HID_GetDevHandle($i)
    
  ;Get device name length
    Local $iLength
    $r = DllCall("GetRawInputDeviceInfo", "UInt", $h, "UInt", $RIDI_DEVICENAME, "UInt", 0, "UInt*", $iLength)
    If $r = -1 Or @error Then Return ""

  ;Get device name
    Local $s[$iLength + 1]
    $r = DllCall("GetRawInputDeviceInfo", "UInt", $h, "UInt", $RIDI_DEVICENAME, "Str", $s, "UInt*", $iLength)
    If $r = -1 Or @error Then Return ""
    
    Return $s
EndFunc

;CONVERT==================================================================================
Func HID_GetDevInfo($i, $Flag, $IsHandle = False)
    Local $uInfo, $iLastHandle = 0
    $RIDI_DEVICEINFO := 0x2000000b
    
  ;Get index if i is handle
    local $h
    If IsHWnd($i) Then $h = HID_GetDevHandle($i)
    
  ;Check if the handle changed
    If $h = $iLastHandle Then;It's the same device. No need to call again
        Return NumGet(uInfo, Flag, HID_NumIsShort(Flag) ? "UShort" : "UInt")
    Else
      ;Get device info buffer size
        $r = DllCall("GetRawInputDeviceInfo", "UInt", $h, "UInt", $RIDI_DEVICEINFO, "UInt", 0, "UInt*", $iLength)
        If $r = -1) Or @error Then Return -1
        
      ;Get device info
        Local $uInfo[$iLength]
        NumPut(iLength, uInfo);Put length in struct
        r := DllCall("GetRawInputDeviceInfo", "UInt", h, "UInt", RIDI_DEVICEINFO, "UInt", &uInfo, "UInt*", iLength)
        If $r = -1) Or @error Then Return -1
        
      ;Successful. Keep handle.
        $iLastHandle = $h
        
      ;Retrieve data
        Return NumGet(uInfo, Flag, HID_NumIsShort(Flag) ? "UShort" : "UInt")
    EndIf
    
    Return 0
EndFunc

Func HID_AddRegister($UsagePage = False, $Usage = False, $Handle = False, $Flags = 0)
    Local $uDev, $iIndex = 0, $iCount = 0, $RIDEV_REMOVE  = 0x00000001, $RIDEV_EXCLUDE = 0x00000010
    
  ;Check if we just want the address
    If Not ($UsagePage Or $Usage Or $Handle Or $Flags) Then
        Return $uDev
  ;Check if we just want the count
    ElseIf $UsagePage = "Count" Then
        Return $iCount
  ;Check if we're dimensioning the struct
    ElseIf $UsagePage AND Not ($Usage OR $Handle OR $Flags) Then
        $iCount = $UsagePage
        $iIndex = 0
        Local $uDev[$iCount * 12]
        Return &uDev
    EndIf
  ;Check if there's space before adding data to struct
    If $iIndex = $iCount Then Return -1;Full capacity
  ;Check if hwnd needs to be null
    bNull := (Flags & RIDEV_REMOVE) Or (Flags & RIDEV_EXCLUDE)

  ;Put in struct
    NumPut(UsagePage,          uDev, (iIndex * 12) + 0, "UShort")
    NumPut(Usage,              uDev, (iIndex * 12) + 2, "UShort")
    NumPut(Flags,              uDev, (iIndex * 12) + 4)
    NumPut(bNull ? 0 : Handle,  uDev, (iIndex * 12) + 8)
    
  ;Move to next slot
    iIndex += 1
    
    Return &uDev
EndFunc
;=========================================================================================

Func HID_Register($UsagePage = False, $Usage = False, $Handle = False, $Flags = 0)
    Local $RIDEV_REMOVE  = 0x00000001, $RIDEV_EXCLUDE := 0x00000010
    
  ;Check if we're using the AddRegister array or only a single struct
    If Not ($UsagePage OR $Usage OR $Handle OR $Flags) Then
      ;Call
        $r = DllCall("RegisterRawInputDevices", "UInt", HID_AddRegister(), "UInt", HID_AddRegister("Count"), "UInt", 12)
      ;Check for error
        If Not $r Then Return -1
        
  ;Build struct and call
    Else
      ;Prep var
        Local $uDev[12]
;CONVERT ====================================================================
      ;Check if hwnd needs to be null
        bNull := (Flags & RIDEV_REMOVE) Or (Flags & RIDEV_EXCLUDE)
        
        NumPut(UsagePage,          uDev, 0, "UShort")
        NumPut(Usage,              uDev, 2, "UShort")
        NumPut(Flags,              uDev, 4)
        NumPut(bNull ? 0 : Handle,  uDev, 8)
        
      ;Call
        $r = DllCall("RegisterRawInputDevices", "UInt", &uDev, "UInt", 1, "UInt", 12)
;============================================================================
      ;Check for error
        If Not $r Then Return -1
    EndIf
    Return 0
EndFunc

;CONVERT ====================================================================
Func HID_GetRegisteredDevs($uDev)
  ;Get length
    Local $iCount[4]
    $r = DllCall("GetRegisteredRawInputDevices", "UInt", 0, "UInt*", $iCount, "UInt", 12)
    If @error Then Return -1    
    If $iCount > 0 Then
        Local $uDev[$iCount * 12];Prep var
      ;Call
        $r = DllCall("GetRegisteredRawInputDevices", "UInt", &uDev, "UInt*", $iCount, "UInt", 12)
        If $r = -1 Or @error Then Return -1
    EndIf
    Return iCount
EndFunc

Func HID_GetInputInfo($InputHandle, $Flag)
    Local $uRawInput, $iLastHandle = 0, $RID_INPUT = 0x10000003
  ;Check if it's the same handle
    If $InputHandle = $iLastHandle Then;We can retrieve the data without having to call again
        Return NumGet(uRawInput, Flag, HID_NumIsShort(Flag) ? (HID_NumIsSigned(Flag) ? "Short" : "UShort") : (HID_NumIsSigned(Flag) ? "Int" : "UInt"))
    Else;We need to get a fresh copy
      ;Get raw data size
        $r = DllCall("GetRawInputData", "UInt", $InputHandle, "UInt", $RID_INPUT, "UInt", 0, "UInt*", $iSize, "UInt", 16)
        If $r = -1 Or @error Then Return -1
        
        Local $uRawInput[$iSize];Prep var
        
      ;Get raw data
        $r = DllCall("GetRawInputData", "UInt", $InputHandle, "UInt", $RID_INPUT, "UInt", &uRawInput, "UInt*", $iSize, "UInt", 16)
        If $r = -1 Or @error Then
            Return -1
        ElseIf $r <> $iSize Then
            Return -1
        EndIf
        
        $iLastHandle = $InputHandle;Keep handle reference of current uRawInput
        
      ;Retrieve data
        Return NumGet(uRawInput, Flag, HID_NumIsShort(Flag) ? (HID_NumIsSigned(Flag) ? "Short" : "UShort") : (HID_NumIsSigned(Flag) ? "Int" : "UInt"))
    EndIf
    Return 0
EndFunc

Func HID_GetInputData($InputHandle, $uData)
    Local $RID_INPUT = 0x10000003, $ID_HID_SIZE = 16, $ID_HID_COUNT = 20, $ID_HID_DATA = 24
    
  ;Get raw data size
    $r = DllCall("GetRawInputData", "UInt", $InputHandle, "UInt", $RID_INPUT, "UInt", 0, "UInt*", $iSize, "UInt", 16)
    If $r = -1 Or @error Then Return -1
    
    Local $uRawInput[$iSize];Prep var
    
  ;Get raw data
    $r = DllCall("GetRawInputData", "UInt", $InputHandle, "UInt", $RID_INPUT, "UInt", &uRawInput, "UInt*", $iSize, "UInt", 16)
    If $r = -1 OR $r <> $iSize OR @error Then Return -1
    
  ;Get the size of each HID input and the number of them
    $iSize  = NumGet(uRawInput, ID_HID_SIZE)
    $iCount = NumGet(uRawInput, ID_HID_COUNT)
    
    Local $uData[$iSize * $iCount];Allocate memory
    
  ;Copy bytes
    DllCall("RtlMoveMemory", $UInt, &uData, $UInt, &uRawInput + 24, $UInt, $iSize * $iCount)
    
    Return ($iSize * $iCount)
EndFunc

;Internal use only
Func HID_NumIsShort($Flag) Then
    If (Flag & 0x0100) EndIf
        Flag ^= 0x0100  ;Remove it
        Return True
    EndIf 
    Return False
EndFunc

;Internal use only
Func HID_NumIsSigned($Flag) Then
    If (Flag & 0x1000) Then
        Flag ^= 0x1000  ;Remove it
        Return True
    EndIf
    Return False
EndFunc
;============================================================================

AHK.rar

Edited by ken82m

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

Sorry I edited above, I meant to say I tried to convert that script but failed.

So that one won't run, and yours returns 0 for the VendorID.

MS sure makes this tough lol

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

Sorry lol. Now I understand who is the noob here lol >me<.

Try this one, I'll upload another corrected RawInput.au3 library to fix this stupid misunderstood. It's actually "|$RIDI_DEVICEINFO - pData points to an $tagRIDDEVICEINFO_* structure. and not $RID_DEVICE_INFO_* >< though you can see it from my last code snippet:

#include <RawInput.au3>
HotKeySet('{ESC}', '_EXIT')

Global $tRID_KD, $pRID_KD, $iRID_KD
Global $tRIH, $pRIH, $iRIH
Global $iNumDevices
Global $hGUI , $pData

$hGUI = GUICreate('Test', 100, 100)
GUIRegisterMsg($WM_INPUT, 'OnInput')

$tRID_KD = DllStructCreate($tagRAWINPUTDEVICE)
$pRID_KD = DllStructGetPtr($tRID_KD)
$iRID_KD = DllStructGetSize($tRID_KD)

$tRIH = DllStructCreate($tagRAWINPUTHEADER)
$pRIH = DllStructGetPtr($tRIH)
$iRIH = DllStructGetSize($tRIH)

$iNumDevices = 1

DllStructSetData($tRID_KD, 'usUsagePage', 0x01)
DllStructSetData($tRID_KD, 'usUsage', 0x06)
DllStructSetData($tRID_KD, 'dwFlags', BitOR($RIDEV_NOLEGACY, $RIDEV_INPUTSINK))
DllStructSetData($tRID_KD, 'hwndTarget', $hGUI)

_RegisterRawInputDevices($pRID_KD, $iNumDevices, $iRID_KD)

While 1
    Sleep(20)
WEnd


Func OnInput($hwnd, $iMsg, $iwParam, $ilParam)
    Local $tRI_KD, $pRI_KD, $iRI_KB
    Local $tRIDI_HID, $pRIDI_HID, $iRIDI_HID
    Local $hDevice
   
    $tRI_KD = DllStructCreate($tagRAWINPUT_KEYBOARD)
    $pRI_KD = DllStructGetPtr($tRI_KD)
    $iRI_KB = DllStructGetSize($tRI_KD)
    
    $tRIDI_HID = DllStructCreate($tagRIDDEVICEINFO_HID)
    $pRIDI_HID = DllStructGetPtr($tRIDI_HID)
    $iRIDI_HID = DllStructGetSize($tRIDI_HID)
    DllStructSetData($tRIDI_HID, 'cbSize', $iRIDI_HID)

    _GetRawInputData($ilParam, $RID_INPUT, $pRI_KD, $iRI_KB, $iRIH)
    If Not @error Then
        $hDevice = DllStructGetData($tRI_KD, 'hDevice')
        ConsoleWrite($hDevice & @LF)
        ConsoleWrite(DllStructGetData($tRI_KD, 'VKey') & @LF)
        ConsoleWrite(DllStructGetData($tRI_KD, 'hDevice') & @LF)
        
        _GetRawInputDeviceInfo($hDevice, $RIDI_DEVICEINFO, $pRIDI_HID, $iRIDI_HID)
        MsgBox(0x40, 'Vendor ID', DllStructGetData($tRIDI_HID, 'dwVendorId'))
    EndIf
   
    $tRI_KD = 0
    Return 'GUI_RUNDEFMSG'
EndFunc

Func _EXIT()
    GUIDelete()
    Exit
EndFunc
Link to comment
Share on other sites

Read about HID and this post.

Also xbox 360 gamepad and wiimote are detected as hid peripherals.

Any chance to have something working for these ?

(xbox chatpad is one of most insoluble internet mystery)

thank you for any reply,

m.

Edited by myspacee
Link to comment
Share on other sites

Hmm, I guess you can register this device to receive $WM_INPUT events from it. The usUsagePage and usUsage are obtainable by using _GetRawInputDeviceInfo(). If you'll get notified about the event from this device then $ilParam of $WM_INPUT is a handle to the this device and you can get it's data using _GetRawInputData($ilParam, $RID_INPUT, $pRI_HID, $iRI_HID, $iRIH).

There are also numerous examples in MSDN site about buffered raw input.

Link to comment
Share on other sites

Okay in the home stretch 99% working lol

Now the vendor id (81) is being returned from any remote buttons you would find on your keyboard.

For example enter, 1-9, arrows etc.

But things you wouldn't find such as channel up/down are coming back as 0, they should be returning 1118

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

I uploaded the tools I found if you want to try them.

http://www.mediafire.com/?sharekey=0fddc05...2db6fb9a8902bda

The first one will should you a list of all HID devices.

And the second you can add UsagePage/Usage parameters and view realtime.

Depending on that output you can figure out if this will work and how you'll need to configure your script to make it work.

-Kenny

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

And the keyboard hook function is notified about these buttons? I think it's better to read the input into $tagRAWINPUT_HID structure because it suppose to catch everything the device is posting but it's quite not ""flexible" as a nice WM_KEYDOWN or WM_LBUTTONDOWN messages.

Link to comment
Share on other sites

Yeah, the keys are reported in your script just without the vendor.

I do see some devices with the vendorID 1118 listed as other in this tool with a usagepage/usage of 12/1

Meaning it's not a keyboard or a mouse. But yet the keys are returned in this tool watching 1/6

Strange

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

Strange behavior. Can yo go to one of this keys and post the value of the hardwareid value:

\\?\HID#HpqRemHidDevice&Col01#5&2f051232&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
\\?\HID#HpqRemHidDevice&Col02#5&2f051232&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}

It should be in "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum" and the rest after the \\?\. You can relate to the first key as:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\HpqRemHidDevice&Col01\5&2f051232&0&0000

Just replacing # by a \.

Edited by Authenticity
Link to comment
Share on other sites

I'm actually testing this on my desktop, since my HP was returning some crazy data with the remote.

My desktop has an MS built reciever.

This one has 3 misc HID devices and 3 keyboard devices.

The three keyboard devices have a vendorid of 81

The three misc devices have a vendor id of 1118

Here are the three misc/1118 devices.

Vid_045e&Pid_006d&Col01#7&2efc902&0&0000#{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}

HardwareID

HID\Vid_045e&Pid_006d&Rev_0200&Col01

HID\Vid_045e&Pid_006d&Col01

HID\IrDevice&Col01

HID\HID_DEVICE&Col01

HID_DEVICE_UP:FFBC_U:0089

HID_DEVICE

Vid_045e&Pid_006d&Col02#7&2efc902&0&0001#{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}

HardwareID

HID\Vid_045e&Pid_006d&Rev_0200&Col02

HID\Vid_045e&Pid_006d&Col02

HID\IrDevice&Col02

HID\HID_DEVICE&Col02

HID_DEVICE_SYSTEM_CONSUMER

HID_DEVICE_UP:000C_U:0001

HID_DEVICE

Vid_045e&Pid_006d&Col03#7&2efc902&0&0002#{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}

HardwareID

HID\Vid_045e&Pid_006d&Rev_0200&Col03

HID\Vid_045e&Pid_006d&Col03

HID\IrDevice&Col03

HID\HID_DEVICE&Col03

HID_DEVICE_UP:FFBC_U:0088

HID_DEVICE

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

So it actually bring it to the beginning. You should get $RIM_TYPEHID when using $ilParam with _GetInputDeviceInfo($ilParam, $RIDI_DEVICEINFO, $tRIDI_HID, $iRIDI_HID) or if I'm wrong and it can highly possible you can modify the previous script. The only thing you need to query is 'dwType' of the $tRIDI_HID struct. It can't happen that both contain the same $RIM_TYPE*.

Edit: And what about the main problem of distinguishing between the devices?

Edit2 OK, so it's by no mean should be $ilParam there, though you can get hDevice by using this $ilParam handle to a $tagRAWINPUT_* struct.

_GetInputDeviceInfo($hDevice $RIDI_DEVICEINFO, $tRIDI_HID, $iRIDI_HID), the rest is known.

Edit3: By the when ken82m, big thanks for helping here to improve and understand better. :)

Edit4: More to come lol:

http://msdn.microsoft.com/en-us/library/ms794141.aspx

http://www.eventghost.org/forum/viewtopic....ff&start=15

Edited by Authenticity
Link to comment
Share on other sites

type comes back as 1 for all buttons on the remote and the keyboard

the 1118 buttons come back with a hdevice of all 0's.

But I don't think that helps, that's probably true for any non keyboard device right?

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

I'm glad your getting something out of this so I don't feel like I'm just driving you nuts lol :)

Edit3: By the when ken82m, big thanks for helping here to improve and understand better.

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

I don't have that one on my desktop, the other id's are it's equivelent

 "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains."

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...