спецификации

Информация о драйверах джойстиков в Windows

Эта информация хранится в реестре, в таком разделе:

HKLM\System\CurrentControlSet\Control\MediaProperties\Joystick\OEM\(идентификатор)

В этом разделе есть несколько параметров.

Параметр OEMCallout (строка) задаёт имя драйвера джойстика (по умолчанию msanalog.vxd).

Параметр OEMName (строка) – это не что иное, как имя джойстика.

В параметре OEMData (двоичный, 8 байт) хранится информация о джойстике. Байты с 4 по 7 – это просто количество кнопок. В байтах с 0 по 4 хранится такая информация:

Байт 0
Бит 0Есть ось R (по умолчанию r) 1
Бит 1Есть «хатка» (hat)
Бит 2 2Хатка основана на кнопках
Бит 3 2Хатка основана на оси (по умолчаниюю r)
Бит 4 3Авиационный штурвал
Бит 5 3Игровой пульт (наподобие Dendy)
Бит 6 3Автомобильный руль
Бит 7Переназначение X <- y
Байт 1
Бит 8Переназначение X <- z
Бит 9Переназначение X <- r
Бит 10Переназначение Y <- x
Бит 11Переназначение Y <- z
Бит 12Переназначение Y <- r
Бит 13Переназначение R <- y
Бит 14Переназначение R <- x
Бит 15Переназначение R <- z
Байт 2
Бит 16 4Переназначение хатка <- y
Бит 17 4Переназначение хатка <- x
Бит 18 4Переназначение хатка <- z
Бит 19Есть ось Z (по умолчанию z)
Бит 20Переназначение Z <- y
Бит 21Переназначение Z <- x
Бит 22Переназначение Z <- r
Бит 23 5Есть 5-я ось
Байт 3
Бит 24 5Есть 6-я ось
Биты 25–31?

1 В дальнейшем оси Windows называем большими буквами X, Y, Z, U=RX, V=RY, R=RZ; оси геймпорта – маленькими x, y, z, r. Оси X и Y должны быть всегда.
2 В геймпортовом джойстике с хаткой должен быть установлен хотя бы один из этих битов. В джойстиках, подключающихся к COM и USB, не используется.
3 Когда эти три бита сняты, это обычный джойстик.
4 Работает, когда есть осевая хатка (биты 1 и 3 стоят).
5 В геймпортовых джойстиках не используется.

Помимо этого, есть ещё несколько строковых параметров.

OEMTestWinCapЗаголовок диалогового окна проверки джойстика
OEMXYLabelПодпись под осями X и Y
OEM#Label
#=Z,R,U,V
Подпись под соответствующей осью
OEMPOVLabelПодпись над хаткой
OEMTestButtonDescПодпись над кнопками
OEMTestMoveDescСообщение «Проверьте игровое устройство...»
OEMCalWinCapЗаголовок диалогового окна калибровки джойстика
OEMCal#
#=1,2,3...
Сообщение, появляющееся на #-м шаге калибровки

Информация об установленных джойстиках

Она хранится в таком разделе.

HKLM\System\CurrentControlSet\Control\MediaResources\joystick\<FixedKey>

В подразделе CurrentJoystickSettings хранится информация об установленных в данный момент джойстиках. Их может быть до 16. Строковый параметр Joystick#OEMName задаёт идентификатор джойстика с номером #. # может быть от 1 до 16.

Двоичный параметр Joystick#Configuration содержит такую информацию.

БайтыТипСмысл
00-072*dwordТа же самая OEMData, с парой дополнительных флажков.
08-0BdwordКоличество осей. Для геймпортового джойстика всегда 6.
0C-236*dwordКалибровка: крайние левые значения осей X, Y, Z, R, U, V.
24-3B6*dwordКалибровка: крайние правые значения осей X, Y, Z, R, U, V.
3C-536*dwordКалибровка: центральные значения осей X, Y, Z, R, U, V.
54-??