Правильный API Windows для поиска CurrentControlSet\Control\MediaProperties?

Мне требуется поддержка пользовательского джойстика, и из-за требований проекта я больше не могу использовать API DirectInput. Я переключился на использование «классического» мультимедийного API Windows (например, joyGetDevCaps и семейства), и все это работает, за одним исключением.

В 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 (идентификатор производителя) и wPid (идентификатор продукта), которые соответствуют двум шестнадцатеричным значениям в имени ключа: wMid = 0x07c0, wPid = 0x1128.

Кроме того, я могу использовать API SetupDiEnumDeviceInfo для GUID_DEVINTERFACE_HID и найти соответствующий контроллер (хотя этот шаг может и не понадобиться):

HID\VID_07C0&PID_1128&REV_1032, HID-совместимый игровой контроллер

Вопрос. Существует ли API для перечисления MediaProperties\PrivateProperties, который мне следует использовать, или «безопасно» использовать эту информацию и напрямую запрашивать реестр? Если есть API, пожалуйста, ответьте со ссылками и/или примером кода! Я не могу найти ничего связанного.


person holtavolt    schedule 27.04.2012    source источник


Ответы (1)


Вы должны использовать значение 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

person rdb    schedule 08.02.2014