我切换从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需要的信息不会有人知道。如何达到这个给定一个实例路径?
我一直有一个类似的问题,我相信我发现了一个潜在的解决方案。
看来你必须调用CreateFile
与RawInput从调用提供的名称GetRawInputDeviceInfo
与RIDI_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鼠标成功。 我还没有发现这是为什么,但也许我的进步会帮助你。
你得到的句柄顶级收集如下解释: https://msdn.microsoft.com/en-us/library/windows/hardware/ff538731%28v=vs.85%29.aspx