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

Примечание

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

Пространство имен Windows.Gaming.Input позволяет независимым поставщикам оборудования (IHV) добавлять данные в реестр компьютера, чтобы их устройства отображались как элементы Gamepad, RacingWheel, ArcadeStick, FlightStick и UINavigationController соответствующим образом. Все независимые поставщики оборудования должны добавить эти данные для совместимых контроллеров. Таким образом все игры UWP (и любые классические игры, которые используют API WinRT) смогут поддерживать ваше игровое устройство управления.

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

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

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

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

Имя Тип Необходим? Info
Выключено DWORD Нет

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

  • 0: устройство не отключено.
  • 1: устройство отключено.
Описание REG_SZНет Краткое описание устройства.

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

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

Геймпад

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

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

Примечание

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

RacingWheel

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

Подраздел Необходим? Info
PreviousGear Да См. раздел Сопоставление кнопок.
NextGear Да
DPadUp Нет
DPadDown Нет
DPadLeft Нет
DPadRight Нет
Button1 Нет
Button2 Нет
Button3 Нет
Button4 Нет
Button5 Нет
Button6 Нет
Button7 Нет
Button8 Нет
Button9 Нет
Button10 Нет
Button11 Нет
Button12 Нет
Button13 Нет
Button14 Нет
Button15 Нет
Button16 Нет
FirstGear Нет
SecondGear Нет
ThirdGear Нет
FourthGear Нет
FifthGear Нет
SixthGear Нет
SeventhGear Нет
ReverseGear Нет
Wheel Да См. разделе Сопоставление осей
Регулирование Да
Brake Да
Clutch Нет
Handbrake Нет
MaxWheelAngle Да См. раздел Сопоставление свойств

ArcadeStick

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

Подраздел Необходим? Info
Action1 Да См. раздел Сопоставление кнопок.
Action2 Да
Action3 Да
Action4 Да
Action5 Да
Action6 Да
Special1 Да
Special2 Да
StickUp Да
StickDown Да
StickLeft Да
StickRight Да

FlightStick

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

Подраздел Необходим? Info
FirePrimary Да См. раздел Сопоставление кнопок.
FireSecondary Да
Roll Да См. разделе Сопоставление осей
Высота тона Да
Yaw Да
Регулирование Да
HatSwitch Да См. раздел Сопоставление переключателей

UINavigation

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

Подраздел Необходим? Info
Меню Да См. раздел Сопоставление кнопок.
Представление Да
Принять Да
Отменить Да
PrimaryUp Да
PrimaryDown Да
PrimaryLeft Да
PrimaryRight Да
Context1 Нет
Context2 Нет
Context3 Нет
Context4 Нет
PAGE UP Нет
PAGE DOWN Нет
PageLeft Нет
PageRight Нет
ScrollUp Нет
ScrollDown Нет
ScrollLeft Нет
ScrollRight Нет
SecondaryUp Нет
SecondaryDown Нет
SecondaryLeft Нет
SecondaryRight Нет

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

Ключи

Далее описывается содержимое каждого подраздела в разделах Gamepad, RacingWheel, ArcadeStick, FlightStick и UINavigation.

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

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

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

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

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

Коммутатор SwitchIndex DWORD Да Индекс в массиве переключателей RawGameController.
SwitchPosition REG_SZ Да

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

  • Вверх
  • UpRight
  • Правый
  • DownRight
  • Down
  • DownLeft
  • Левый
  • UpLeft
IncludeAdjacent DWORD Нет Указывает, что в смежных положениях переключателя сопоставленная кнопка также сообщит о нажатии.

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

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

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

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

MaxButton AxisValue
Ложь. 0,0
TRUE 1,0
MinValueButtonIndex DWORD Нет

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

MinButton MaxButton AxisValue
FALSE FALSE 0,5
FALSE TRUE 1,0
TRUE FALSE 0,0
TRUE TRUE 0,5
Ось AxisIndex DWORD Да Индекс в массиве осей RawGameController.
Invert DWORD Нет Указывает, что сопоставленное значение оси следует инвертировать перед возвратом.
Коммутатор SwitchIndex DWORD Да Индекс в массиве переключателей RawGameController.
MaxValueSwitchPosition REG_SZ Да

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

  • Вверх
  • UpRight
  • Правый
  • DownRight
  • Down
  • DownLeft
  • Левый
  • UpLeft

Указывает положение переключателя, в котором сопоставленное значение оси отображается как равное 1,0. Противоположное направление MaxValueSwitchPosition считается равным 0,0. Например, если значение MaxValueSwitchPosition равно Up, значение оси преобразуется, как показано ниже:

Положение переключателя AxisValue
Вверх 1,0
Center 0,5
Down 0,0
IncludeAdjacent DWORD Нет

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

Положение переключателя AxisValue
Вверх 1,0
UpRight 1,0
UpLeft 1,0
Center 0,5
Down 0,0
DownRight 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
Ось SwitchKind REG_SZ TwoWay, FourWay или EightWay
XAxisIndex DWORD YAxisIndex всегда присутствует. XAxisIndex присутствует, только если SwitchKind имеет значение FourWay или EightWay.
YAxisIndex DWORD
XDeadZonePercent DWORD Указывает размер мертвой зоны вокруг центрального положения осей.
YDeadZonePercent DWORD
XDebouncePercent DWORD Определите размер окон вокруг верхнего и нижнего ограничения мертвой зоны, которые используются для устранения ложного срабатывания переданного состояния переключателя.
YDebouncePercent DWORD
XInvert DWORD Указывает, что соответствующие значения оси следует инвертировать перед применением вычислений мертвой зоны и окна между моментом.
YInvert DWORD
Коммутатор SwitchIndex DWORD Индекс в массиве переключателей RawGameController.
Invert DWORD Указывает, что переключатель сообщает о положении против часовой стрелки, а не по часовой стрелке.
PositionBias DWORD

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

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

Position Переданное значение После установки флагов PositionBias и Invert
DownRight 0 3
Правый 1 2
UpRight 2 1
Вверх 3 0
UpLeft 4 7
Левый 5 6
DownLeft 6 5
Down 7 4

Значения *ButtonIndex

*Индекс значений ButtonIndex в массиве кнопок RawGameController:

ButtonCount SwitchKind RequiredMappings
2 TwoWay
  • UpButtonIndex
  • DownButtonIndex
4 FourWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
4 EightWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
8 EightWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
  • UpRightButtonIndex
  • DownRightButtonIndex
  • DownLeftButtonIndex
  • UpLeftButtonIndex

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

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

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

Метки

Метки должны находиться в разделе Labels в корневом каталоге устройства. В разделе Labels может быть три подраздела: Buttons, Axes и Switches.

Метки кнопок

Раздел Buttons сопоставляет каждую позицию кнопки в массиве кнопок RawGameController со строкой. Каждая строка внутренне сопоставляется с соответствующим значением перечисления GameControllerButtonLabel. Например, если на геймпаде 10 кнопок и 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

Метки в разделе Buttons должны отображаться в следующем порядке:

Имя Значение (тип: REG_SZ)
Button0 Меню
Button1 Представление
Button2 LeftStickButton
Button3 RightStickButton
Button4 LetterA
Button5 LetterB
Button6 LetterX
Button7 LetterY
Button8 LeftBumper
Button9 RightBumper

Метки осей

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

Метки переключателей

Раздел Switches сопоставляет положения переключателей с метками. Для значений используется следующее соглашение об именовании: чтобы получить метку положения переключателя с индексом x в массиве переключателей RawGameController, добавьте эти значения в подраздел Switches:

  • 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

См. также раздел