如何让人类可读的名称RawInput HID设备?(How to get human readabl

2019-08-01 01:10发布

我切换从DirectInput的应用程序RawInput对于手柄处理,我想要呈现的可读描述为每个手柄。 理想的做法是出现在设备管理器设备的文本,但USB产品说明也将这样做。 任何方法应该没有管理员权限。

到目前为止,我已经找到了一个集线索 :有似乎是在注册表中的文本字段HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM这是相同的,通过DirectInput的提供的名称。 这不是完美的 - 我有英语出现在设备管理器中的手柄,而是列为氀在注册表中。

有没有办法从提供的句柄获得WM_INPUT设备管理器的说明? HidD_GetProductString看起来很有希望,但我不知道如何从RawInput手柄获得在HID顶级集合手柄。

编辑:我有一个设备实例路径(例如\\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}这可能足以提取我从SETUPAPI需要的信息不会有人知道。如何达到这个给定一个实例路径?

Answer 1:

我一直有一个类似的问题,我相信我发现了一个潜在的解决方案。

看来你必须调用CreateFile与RawInput从调用提供的名称GetRawInputDeviceInfoRIDI_DEVICENAME作为uiCommand参数的说法。 这会给你一个句柄与您可以调用设备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上大多数附上了我的系统上的设备的失败,似乎只适用于USB键盘和网络摄像头成功。 它不会对我的USB鼠标成功。 我还没有发现这是为什么,但也许我的进步会帮助你。



Answer 2:

你得到的句柄顶级收集如下解释: https://msdn.microsoft.com/en-us/library/windows/hardware/ff538731%28v=vs.85%29.aspx



文章来源: How to get human readable name for RawInput HID device?