我希望支持自定义操纵杆设备,由于项目要求,我不能再使用DirectInput API。 我已经改用"经典"的Windows多媒体API(例如joyGetDevCaps和family(,除了一个例外,它都可以工作。
DirectInput DeviceInstance 有两个字段,即 InstanceName 和 ProductName,它们返回设备的正确"自定义"名称。
相应的 joyGetDevCaps 产品名称字段 szPname 返回一个通用的"Microsoft PC 操纵杆驱动程序"。
在安装了设备的系统上搜索注册表时,我发现此节点中有一个REG_SZ OEMName 条目,其中包含我想要的字符串:
HKEY_LOCAL_MACHINE\系统\当前控制集\控制\媒体属性\私有属性\操纵杆\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,请用参考和/或示例代码回答! 我找不到任何相关内容。
值来获取以下键:(在本例中,szRegName 是 "DINPUT.DLL"(:
HKCUSystemCurrentControlSetControlMediaResourcesJoystickDINPUT.DLLCurrentJoystickSettings
它包含诸如"Joystick1OEMName"之类的值,该值将包含诸如"VID_07C0&PID_1128"之类的字符串,可用于在PrivateProperties下查找相应的密钥。
可以在此处找到一些示例代码:https://github.com/google/liquidfun/blob/master/freeglut/src/mswin/fg_joystick_mswin.c