我希望支持自定义操纵杆设备,由于项目要求,我无法再使用DirectInput API。我已经转而使用“经典”Windows多媒体API(例如 joyGetDevCaps 和系列),这一切都有一个例外。
DirectInput DeviceInstance有两个字段, InstanceName 和 ProductName ,它们返回了设备的正确“自定义”名称。
相应的 joyGetDevCaps 产品名称字段szPname返回一个通用的“Microsoft PC-joystick driver”。
在安装了设备的系统上搜索注册表时,我发现此节点中有一个REG_SZ OEMName 条目,其中包含我想要的字符串:
HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ MediaProperties \ PrivateProperties \操纵杆\ 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,请回答参考和/或示例代码!我找不到任何相关的东西。
答案 0 :(得分:0)
您应该使用szRegName值来获取以下密钥:(在这种情况下,szRegName是“DINPUT.DLL”):
HKCU\System\CurrentControlSet\Control\MediaResources\Joystick\DINPUT.DLL\CurrentJoystickSettings
它包含“Joystick1OEMName”之类的值,它将包含“VID_07C0& PID_1128”等字符串,可用于在PrivateProperties下查找相应的键。
可在此处找到一些示例代码: https://github.com/google/liquidfun/blob/master/freeglut/src/mswin/fg_joystick_mswin.c