我正在将应用程序从 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
with RIDI_DEVICENAME
as the 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 鼠标没有成功。我还没有发现为什么会这样,但也许我的进展会对你有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)