Прочитать на английском

Поделиться через


Данные реестра для игровых устройств управления

Примечание

Этот раздел предназначен для производителей игровых контроллеров, совместимых с Windows 10, и не применяется к большинству разработчиков.

Пространство имен Windows.Gaming.Input позволяет независимым поставщикам оборудования (IHVs) добавлять данные в реестр ПК, что позволяет их устройствам отображаться как Gamepads, RacingWheels, ArcadeSticks, FlightSticks и UINavigationControllers. Все IHV должны добавлять эти данные для своих совместимых контроллеров. Благодаря этому все игры UWP (и все классические игры, использующие API WinRT), смогут поддерживать ваш игровой контроллер.

Схема сопоставления

Сопоставления для устройства с идентификатором поставщика (VID) VVVV, идентификатором продукта (PID) PPPP, страницей использования UUUU и идентификатором использования XXXX будут прочитаны из этого расположения в реестре:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\VVVVPPPPUUUUXXXX

В таблице ниже описаны ожидаемые значения в корневом расположении устройства:

Имя. Тип Обязательное? Сведения
Выключено DWORD No

Указывает, что конкретное устройство должно быть отключено.

  • 0. Устройство не отключено.
  • 1. Устройство отключено.
Description REG_SZ No Краткое описание устройства.

Установщик устройства должен добавить эти данные в реестр (с помощью программы установки или INF-файла).

Подразделы в корневом расположении устройства подробно описаны в следующих разделах.

Игровой планшет

В таблице ниже перечислены обязательные и необязательные подразделы в подразделе Gamepad :

Подраздел Обязательное? Сведения
Меню Да См. сопоставление кнопки
Представления Да
а Да
Б Да
X Да
Y Да
LeftShoulder Да
RightShoulder Да
LeftThumbstickButton Да
RightThumbstickButton Да
DPadUp Да
DPadDown Да
DPadLeft Да
DPadRight Да
Paddle1 No
Paddle2 No
Paddle3 No
Paddle4 No
LeftTrigger Да См. сопоставление осей
RightTrigger Да
LeftThumbstickX Да
LeftThumbstickY Да
RightThumbstickX Да
RightThumbstickY Да

Примечание

Если вы добавляете игровой контроллер в качестве поддерживаемого игрового контроллера, мы настоятельно рекомендуем также добавить его в качестве поддерживаемого UINavigationController.

RacingWheel

В таблице ниже перечислены обязательные и необязательные подразделы в подразделе RacingWheel :

Подраздел Обязательное? Сведения
НазадGear Да См. сопоставление кнопки
NextGear Да
DPadUp No
DPadDown No
DPadLeft No
DPadRight No
Кнопка1 No
Кнопка2 No
Кнопка 3 No
Кнопка 4 No
Кнопка5 No
Кнопка6 No
Кнопка7 No
Кнопка8 No
Button9 No
Button10 No
Кнопка11 No
Кнопка12 No
Кнопка13 No
Кнопка14 No
Кнопка15 No
Кнопка16 No
FirstGear No
SecondGear No
ThirdGear No
FourthGear No
ПятыйGear No
ШестойGear No
СедьмойGear No
ReverseGear No
Колесико Да См. сопоставление осей
Регулирование Да
Тормоз Да
Сцепление No
Ручной тормоз No
MaxWheelAngle Да См. сопоставление свойств

ArcadeStick

В таблице ниже перечислены обязательные и необязательные подразделы в подразделе ArcadeStick :

Подраздел Обязательное? Сведения
Действие 1 Да См. сопоставление кнопки
Действие2 Да
Действие3 Да
Действие4 Да
Действие5 Да
Действие6 Да
Специальные1 Да
Специальные2 Да
Закрепление Да
StickDown Да
StickLeft Да
StickRight Да

FlightStick

В таблице ниже перечислены обязательные и необязательные подразделы в подразделе FlightStick :

Подраздел Обязательное? Сведения
FirePrimary Да См. сопоставление кнопки
FireSecondary Да
Рулон Да См. сопоставление осей
Тон Да
Рыскать Да
Регулирование Да
HatSwitch Да См. сопоставление переключателей

UINavigation

В таблице ниже перечислены обязательные и необязательные подразделы в подразделе UINavigation :

Подраздел Обязательное? Сведения
Меню Да См. сопоставление кнопки
Представления Да
Принять Да
Отменить Да
PrimaryUp Да
PrimaryDown Да
PrimaryLeft Да
PrimaryRight Да
Context1 No
Context2 No
Context3 No
Context4 No
PageUp No
PageDown No
PageLeft No
PageRight No
Прокрутка No
ScrollDown No
ScrollLeft No
ScrollRight No
Дополнительное No
SecondaryDown No
SecondaryLeft No
SecondaryRight No

Дополнительные сведения о контроллерах навигации пользовательского интерфейса и приведенных выше командах см. в разделе "Контроллер навигации пользовательского интерфейса".

Ключи

В следующих разделах описано содержимое каждого из вложенных ключей в gamepad, RacingWheel, ArcadeStick, FlightStick и UINavigation.

Сопоставление кнопок

В таблице ниже перечислены значения, необходимые для сопоставления кнопки. Например, при нажатии клавиши DPadUp на игровом контроллере сопоставление для DPadUp должно содержать значение ButtonIndex (источниккнопка). Если DPadUp необходимо сопоставить с положением переключателя, сопоставление DPadUp должно содержать значения SwitchIndex и SwitchPosition (источник имеет значение Switch).

Исходный код Имя значения Тип значения Обязательное? Сведения о значении
Кнопка ButtonIndex DWORD Да Индекс в массиве кнопки RawGameController .
Axis AxisIndex DWORD Да Индекс в массиве осей RawGameController .
Инвертировать DWORD No Указывает, что значение оси должно быть инвертировано до применения пороговых и дебоuncePercent-факторов .
ThresholdPercent DWORD Да Указывает положение оси, в которой сопоставленное значение кнопки переходит между нажатыми и освобожденными состояниями. Допустимый диапазон значений составляет от 0 до 100. Кнопка считается нажатием, если значение оси больше или равно этому значению.
DebouncePercent DWORD Да

Определяет размер окна вокруг значения ThresholdPercent , который используется для разбиения состояния указанной кнопки. Допустимый диапазон значений составляет от 0 до 100. Переходы состояния кнопки могут происходить только в том случае, если значение оси пересекает верхние или нижние границы окна разбиения. Например, порогОвое значение 50 и DebouncePercent 10 приводит к отмене границ на 45% и 55% значений оси полного диапазона. Кнопка не может перейти к состоянию нажатия, пока значение оси не достигнет 55% или выше, и оно не может вернуться к освобожденному состоянию, пока значение оси не достигнет 45% или ниже.

Границы вычисленного окна расшифровываются в диапазоне от 0 до 100 %. Например, пороговое значение 5 % и 20 % от 20 % приведет к падению границ окна на 0% и 15 %. Состояние кнопки для значений оси 0% и 100% всегда сообщается как освобожденное и нажимаемое соответственно независимо от порогового значения и разбиения.

Switch SwitchIndex DWORD Да Индекс в массиве коммутаторов RawGameController .
SwitchPosition REG_SZ Да

Указывает положение переключателя, которое приведет к тому, что сопоставленная кнопка будет сообщать о том, что она нажимается. Значения позиции могут быть одной из следующих строк:

  • Up
  • Вертикальный
  • Right
  • Откровенный
  • Down
  • DownLeft
  • Left
  • UpLeft
IncludeAdjacent DWORD No Указывает, что смежные позиции переключателя также вызывают сопоставленную кнопку, чтобы сообщить о том, что она нажимается.

Сопоставление осей

В таблице ниже перечислены значения, необходимые для сопоставления оси:

Исходный код Имя значения Тип значения Обязательное? Сведения о значении
Кнопка MaxValueButtonIndex DWORD Да

Индекс в массиве кнопок RawGameController , который преобразуется в сопоставленное значение однонаправленной оси.

MaxButton AxisValue
FALSE 0,0
TRUE 1.0
MinValueButtonIndex DWORD No

Указывает, что сопоставленная ось двунаправленна. Значения MaxButton и MinButton объединяются в одну двунаправленную ось, как показано ниже.

MinButton MaxButton AxisValue
FALSE FALSE 0,5
FALSE TRUE 1.0
TRUE FALSE 0,0
TRUE TRUE 0,5
Axis AxisIndex DWORD Да Индекс в массиве осей RawGameController .
Инвертировать DWORD No Указывает, что сопоставленное значение оси должно быть инвертировано перед возвратом.
Switch SwitchIndex DWORD Да Индекс в массиве коммутаторов RawGameController .
MaxValueSwitchPosition REG_SZ Да

Одна из следующих строк:

  • Up
  • Вертикальный
  • Right
  • Откровенный
  • Down
  • DownLeft
  • Left
  • UpLeft

Указывает положение переключателя, которое приводит к тому, что значение сопоставленной оси будет сообщаться как 1.0. Противоположное направление MaxValueSwitchPosition рассматривается как 0,0. Например, если MaxValueSwitchPosition находится вверх, то ниже показано преобразование значений оси:

Положение переключателя AxisValue
Up 1.0
Центр 0,5
Down 0,0
IncludeAdjacent DWORD No

Указывает, что смежные позиции коммутатора также приводят к тому, что сопоставленная ось будет сообщать 1.0. В приведенном выше примере, если задан параметр IncludeAdjacent , преобразование осей выполняется следующим образом:

Положение переключателя AxisValue
Up 1.0
Вертикальный 1.0
UpLeft 1.0
Центр 0,5
Down 0,0
Откровенный 0,0
DownLeft 0,0

Сопоставление коммутаторов

Переключение позиций можно сопоставить либо из набора кнопок в массиве кнопок RawGameController , либо из индекса в массиве коммутаторов. Переключение позиций невозможно сопоставить с осей.

Исходный код Имя значения Тип значения Сведения о значении
Кнопка ButtonCount DWORD 2, 4 или 8
SwitchKind REG_SZ TwoWay, FourWay или EightWay
UpButtonIndex DWORD См. * Значения ButtonIndex
DownButtonIndex DWORD
LeftButtonIndex DWORD
RightButtonIndex DWORD
UpRightButtonIndex DWORD
DownRightButtonIndex DWORD
DownLeftButtonIndex DWORD
UpLeftButtonIndex DWORD
Axis SwitchKind REG_SZ TwoWay, FourWay или EightWay
XAxisIndex DWORD YAxisIndex всегда присутствует. XAxisIndex присутствует только в том случае, если SwitchKindFourWay или EightWay.
YAxisIndex DWORD
XDeadZonePercent DWORD Укажите размер мертвой зоны вокруг центрального положения осей.
YDeadZonePercent DWORD
XDebouncePercent DWORD Определите размер окон вокруг ограничений верхнего и нижнего мертвых зон, которые используются для отмены отскоки состояния переключения.
YDebouncePercent DWORD
XInvert DWORD Укажите, что соответствующие значения оси должны быть перевернуты до применения мертвых зон и вычислений окон дебоunce.
YInvert DWORD
Switch SwitchIndex DWORD Индекс в массиве коммутаторов RawGameController .
Инвертировать DWORD Указывает, что переключатель сообщает о своих позициях в порядке по часовой стрелке, а не по умолчанию.
PositionBias DWORD

Сдвигает начальную точку того, как позиции передаются указанным объемом. PositionBias всегда подсчитывается по часовой стрелке от исходной начальной точки и применяется перед обратным порядком значений.

Например, переключатель, который сообщает о позициях, начиная с DownRight в порядке счетчика по часовой стрелке, можно нормализовать, установив флаг Инверта и указав позицию PositionBias из 5:

Position Указанное значение После флагов PositionBias и Invert
Откровенный 0 3
Right 1 2
Вертикальный 2 1
Up 3 0
UpLeft 4 7
Left 5 6
DownLeft 6 5
Down 7 4

*Значения ButtonIndex

*ButtonIndex values index in the RawGameController's button array:

ButtonCount SwitchKind RequiredMappings
2 TwoWay
  • UpButtonIndex
  • DownButtonIndex
4 FourWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
4 ВосемьWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
8 ВосемьWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
  • UpRightButtonIndex
  • DownRightButtonIndex
  • DownLeftButtonIndex
  • UpLeftButtonIndex

Сопоставление свойств

Это статические значения сопоставления для разных типов сопоставления.

Сопоставление Имя значения Тип значения Сведения о значении
RacingWheel MaxWheelAngle DWORD Указывает максимальный угол физического колеса, поддерживаемый колесом в одном направлении. Например, колесо с возможным поворотом -90 градусов до 90 градусов будет указывать 90.

Наклейки

Метки должны присутствовать под ключом Меток в корневом каталоге устройства. Метки могут содержать 3 подраздела: кнопки, оси и переключатели.

Метки кнопки

Клавиша Button сопоставляет каждую позицию кнопки в массиве кнопок RawGameController со строкой. Каждая строка сопоставляется внутренне с соответствующим значением перечисления GameControllerButtonLabel . Например, если на геймпаде есть десять кнопок и порядок, в котором RawGameController анализирует кнопки и отображает их в отчете о кнопках следующим образом:

Menu,               // Index 0
View,               // Index 1
LeftStickButton,    // Index 2
RightStickButton,   // Index 3
LetterA,            // Index 4
LetterB,            // Index 5
LetterX,            // Index 6
LetterY,            // Index 7
LeftBumper,         // Index 8
RightBumper         // Index 9

Метки должны отображаться в этом порядке в разделе "Кнопки ":

Имя. Значение (тип: REG_SZ)
Кнопка0 Меню
Кнопка1 Представления
Кнопка2 LeftStickButton
Кнопка 3 RightStickButton
Кнопка 4 LetterA
Кнопка5 LetterB
Кнопка6 LetterX
Кнопка7 Буква
Кнопка8 LeftBumper
Button9 RightBumper

Метки осей

Ключ Axes сопоставляет каждую позицию оси в массиве осей RawGameController с одной из меток, перечисленных в GameControllerButtonLabel Enum так же, как и метки кнопки. См. пример в метках Button.

Переключение меток

Клавиши Switchs сопоставляют позиции на метки. Значения следуют этому соглашению об именовании: чтобы пометить положение коммутатора, индекс которого имеет значение x в массиве коммутаторов RawGameController, добавьте эти значения в подраздел "Переключатели".

  • SwitchxUp
  • SwitchxUpRight
  • SwitchxRight
  • SwitchxDownRight
  • SwitchxDown
  • SwitchxDownLeft
  • SwitchxUpLeft
  • SwitchxLeft

В следующей таблице показан пример набора меток для переключения позиций 4-способного коммутатора, который отображается в индексе 0 в RawGameController:

Имя. Значение (тип: REG_SZ)
Switch0Up XboxUp
Switch0Right XboxRight
Switch0Down XboxDown
Switch0Left XboxLeft

Пример файла реестра

Чтобы показать, как объединяются все эти сопоставления и значения, ниже приведен пример файла реестра для универсального файла RacingWheel:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004]
"Description" = "Example Wheel Device"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\Labels\Buttons]
"Button0" = "LetterA"
"Button1" = "LetterB"
"Button2" = "LetterX"
"Button3" = "LetterY"
"Button6" = "Menu"
"Button7" = "View"
"Button8" = "RightStickButton"
"Button9" = "LeftStickButton"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\Labels\Switches]
"Switch0Down" = "Down"
"Switch0Left" = "Left"
"Switch0Right" = "Right"
"Switch0Up" = "Up"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel]
"MaxWheelAngle" = dword:000001c2

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Brake]
"AxisIndex" = dword:00000002
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button1]
"ButtonIndex" = dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button2]
"ButtonIndex" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button3]
"ButtonIndex" = dword:00000002

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button4]
"ButtonIndex" = dword:00000003

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button5]
"ButtonIndex" = dword:00000009

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button6]
"ButtonIndex" = dword:00000008

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button7]
"ButtonIndex" = dword:00000007

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button8]
"ButtonIndex" = dword:00000006

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Clutch]
"AxisIndex" = dword:00000003
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadDown]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Down"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadLeft]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Left"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadRight]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Right"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadUp]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Up"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FifthGear]
"ButtonIndex" = dword:00000010

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FirstGear]
"ButtonIndex" = dword:0000000c

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FourthGear]
"ButtonIndex" = dword:0000000f

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\NextGear]
"ButtonIndex" = dword:00000004

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\PreviousGear]
"ButtonIndex" = dword:00000005

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\ReverseGear]
"ButtonIndex" = dword:0000000b

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\SecondGear]
"ButtonIndex" = dword:0000000d

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\SixthGear]
"ButtonIndex" = dword:00000011

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\ThirdGear]
"ButtonIndex" = dword:0000000e

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Throttle]
"AxisIndex" = dword:00000001
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Wheel]
"AxisIndex" = dword:00000000
"Invert" = dword:00000000

См. также