我希望支持自定义操纵杆设备,但由于项目要求,我不能再使用 DirectInput API。我已经转而使用“经典”的 Windows 多媒体 API(例如joyGetDevCaps和 family),并且除了一个例外,它都能正常工作。
DirectInput DeviceInstance 有两个字段,InstanceName和ProductName,它们返回正确的“自定义”设备名称。
对应的joyGetDevCaps产品名称字段 szPname 返回一个通用的“Microsoft PC 游戏杆驱动程序”。
在安装了设备的系统上搜索注册表时,我发现此节点中有一个 REG_SZ OEMName条目,其中包含我想要的字符串:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM\VID_07C0&PID_1128
JOYCAPS 中返回两个字段,wMid(制造商 ID)和 wPid(产品 ID),它们映射到键名中的两个十六进制值:wMid = 0x07c0,wPid = 0x1128。
此外,我可以在 GUID_DEVINTERFACE_HID 上使用 SetupDiEnumDeviceInfo API 并找到匹配的控制器(尽管此步骤可能不是必需的):
HID\VID_07C0&PID_1128&REV_1032,HID兼容游戏控制器
问题:是否有用于枚举我应该使用的 MediaProperties\PrivateProperties 的 API,或者使用此信息并直接查询注册表是否“安全”?如果有 API,请用参考和/或示例代码回答!我找不到任何相关的东西。