Authenticity Posted May 18, 2009 Posted May 18, 2009 (edited) 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 May 18, 2009 by Authenticity
ken82m Posted May 19, 2009 Posted May 19, 2009 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=0So 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 0expandcollapse popup#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."
Authenticity Posted May 19, 2009 Posted May 19, 2009 (edited) 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 May 19, 2009 by Authenticity
ken82m Posted May 19, 2009 Posted May 19, 2009 (edited) 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.-KennyHere are the problem lines: AHKHID.AU3Lines 21-47Lines 176-188Lines 209-274Lines 290-301Lines 327Lines 336Lines 346Lines 361Lines 365-366Lines 371Lines 377-393 MCE.AU3Lines 20Script:expandcollapse popup;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 EndFuncUDF:expandcollapse popup$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 May 19, 2009 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."
ken82m Posted May 19, 2009 Posted May 19, 2009 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."
Authenticity Posted May 19, 2009 Posted May 19, 2009 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:expandcollapse popup#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
myspacee Posted May 19, 2009 Posted May 19, 2009 (edited) 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 May 19, 2009 by myspacee
Authenticity Posted May 19, 2009 Posted May 19, 2009 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.
ken82m Posted May 19, 2009 Posted May 19, 2009 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."
ken82m Posted May 19, 2009 Posted May 19, 2009 I uploaded the tools I found if you want to try them.http://www.mediafire.com/?sharekey=0fddc05...2db6fb9a8902bdaThe 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."
Authenticity Posted May 19, 2009 Posted May 19, 2009 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.
ken82m Posted May 19, 2009 Posted May 19, 2009 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."
Authenticity Posted May 19, 2009 Posted May 19, 2009 (edited) 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 May 19, 2009 by Authenticity
ken82m Posted May 19, 2009 Posted May 19, 2009 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 81The three misc devices have a vendor id of 1118Here are the three misc/1118 devices.Vid_045e&Pid_006d&Col01#7&2efc902&0&0000#{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}HardwareIDHID\Vid_045e&Pid_006d&Rev_0200&Col01HID\Vid_045e&Pid_006d&Col01HID\IrDevice&Col01HID\HID_DEVICE&Col01HID_DEVICE_UP:FFBC_U:0089HID_DEVICEVid_045e&Pid_006d&Col02#7&2efc902&0&0001#{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}HardwareIDHID\Vid_045e&Pid_006d&Rev_0200&Col02HID\Vid_045e&Pid_006d&Col02HID\IrDevice&Col02HID\HID_DEVICE&Col02HID_DEVICE_SYSTEM_CONSUMERHID_DEVICE_UP:000C_U:0001HID_DEVICEVid_045e&Pid_006d&Col03#7&2efc902&0&0002#{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}HardwareIDHID\Vid_045e&Pid_006d&Rev_0200&Col03HID\Vid_045e&Pid_006d&Col03HID\IrDevice&Col03HID\HID_DEVICE&Col03HID_DEVICE_UP:FFBC_U:0088HID_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."
Authenticity Posted May 19, 2009 Posted May 19, 2009 (edited) 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.aspxhttp://www.eventghost.org/forum/viewtopic....ff&start=15 Edited May 19, 2009 by Authenticity
ken82m Posted May 19, 2009 Posted May 19, 2009 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."
ken82m Posted May 20, 2009 Posted May 20, 2009 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."
Authenticity Posted May 20, 2009 Posted May 20, 2009 Heh, sorry to bother you again but can you go back to this specific key, if it exists, and post the hardwareid: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\HpqRemHidDevice&Col01\5&2f051232&0&0000
ken82m Posted May 20, 2009 Posted May 20, 2009 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."
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now