我正在将一个应用程序从DirectInput切换到RawInput进行游戏手柄处理,我想为每个游戏手柄提供一个可读的描述。 理想的是设备pipe理器中出现的设备文本,但USB产品描述也可以。 任何方法都应该没有pipe理员权限。
到目前为止,我已经find了一组线索 : HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM
registry中似乎有一个文本字段,它与DirectInput提供的名称相同。 这不是完美的 – 我有一个游戏手柄,在设备pipe理器中出现英文,但在registry中列为氀。
有没有办法从WM_INPUT
提供的HANDLE到设备pipe理器描述? HidD_GetProductString
看起来很有希望,但我不知道如何从RawInput句柄获取Hid顶级集合句柄。
编辑:我有一个设备实例path(例如\\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
,这可能足以从SetupAPI中提取我需要的信息。如何达到这个给定的实例path?
我一直有类似的问题,并相信我找到了一个潜在的解决方案。
看起来您必须使用RawInput通过调用GetRawInputDeviceInfo
和RIDI_DEVICENAME
作为uiCommand
参数的参数来调用CreateFile
。 这会给你一个你可以调用HidD_GetProductString
的设备的句柄。
wchar_t DeviceName[126]; HANDLE HIDHandle = CreateFile(RawInputDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if(HIDHandle) { BOOLEAN Result = HidD_GetProductString(HIDHandle, DeviceName, sizeof(wchar_t) * 126); CloseHandle(HIDHandle); }
但是,似乎HidD_GetProductString
在我的系统上连接的大多数设备上HidD_GetProductString
失败了,而且似乎只能用我的USB键盘和网络摄像头。 我的USB鼠标不成功。 我还没有发现这是为什么,但也许我的进步将帮助你。
您可以按照以下说明获取顶级集合的句柄: https : //msdn.microsoft.com/en-us/library/windows/hardware/ff538731%28v=vs.85%29.aspx