Adr*_*Cox 10 windows device hid
我正在将一个应用程序从DirectInput切换到RawInput以进行游戏手柄处理,我想为每个游戏手柄提供一个人类可读的描述.理想的是设备管理器中出现的设备文本,但USB产品描述也可以.任何方法都应在没有管理员权限的情
到目前为止,我已经找到了一组线索:注册表中的文本字段似乎与HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM
DirectInput提供的名称相同.这并不完美 - 我有一个在设备管理器中以英文显示的游戏手柄,但在注册表中列为氀.
有没有办法从提供的HANDLE 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);
}
Run Code Online (Sandbox Code Playgroud)
然而,似乎HidD_GetProductString
在我的系统上连接的大多数设备上都失败了,并且似乎只有我的 USB 键盘和网络摄像头成功了。我的 USB 鼠标没有成功。我还没有发现为什么会这样,但也许我的进展会对你有所帮助。