更正Windows API以查找CurrentControlSet \ Control \ MediaProperties?

时间:2012-04-27 18:53:28

标签: windows directx joystick winmm setupapi

我希望支持自定义操纵杆设备,由于项目要求,我无法再使用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,请回答参考和/或示例代码!我找不到任何相关的东西。

1 个答案:

答案 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