4

我希望支持自定义操纵杆设备,但由于项目要求,我不能再使用 DirectInput API。我已经转而使用“经典”的 Windows 多媒体 API(例如joyGetDevCaps和 family),并且除了一个例外,它都能正常工作。

DirectInput DeviceInstance 有两个字段,InstanceNameProductName,它们返回正确的“自定义”设备名称。

对应的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,请用参考和/或示例代码回答!我找不到任何相关的东西。

4

1 回答 1

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

于 2014-02-08T12:00:25.557 回答