Данные реестра для игровых устройств управления
Примечание
Данный раздел предназначен для производителей игровых устройств, совместимых с 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 | Нет |
Указывает, что это конкретное устройство должно быть отключено.
|
Описание | 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 | Да |
Указывает положение переключателя, в котором сопоставленная кнопка сообщит о нажатии. Значением положений может быть одна из этих строк:
|
|
IncludeAdjacent | DWORD | Нет | Указывает, что в смежных положениях переключателя сопоставленная кнопка также сообщит о нажатии. |
Сопоставление осей
В таблице ниже приведены значения, которые необходимы для сопоставления оси.
Источник | Имя значения | Тип значения | Необходим? | Сведения о значении | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Кнопка | MaxValueButtonIndex | DWORD | Да |
Индекс в массиве кнопок RawGameController, который преобразуется в сопоставленное однонаправленное значение оси.
|
|||||||||||||||
MinValueButtonIndex | DWORD | Нет |
Указывает, что сопоставленная ось двунаправленная. Значения MaxButton и MinButton объединяются в одну двунаправленную ось, как показано ниже.
|
||||||||||||||||
Ось | AxisIndex | DWORD | Да | Индекс в массиве осей RawGameController. | |||||||||||||||
Invert | DWORD | Нет | Указывает, что сопоставленное значение оси следует инвертировать перед возвратом. | ||||||||||||||||
Коммутатор | SwitchIndex | DWORD | Да | Индекс в массиве переключателей RawGameController. | |||||||||||||||
MaxValueSwitchPosition | REG_SZ | Да |
Одна из следующих строк:
Указывает положение переключателя, в котором сопоставленное значение оси отображается как равное 1,0. Противоположное направление MaxValueSwitchPosition считается равным 0,0. Например, если значение MaxValueSwitchPosition равно Up, значение оси преобразуется, как показано ниже:
|
||||||||||||||||
IncludeAdjacent | DWORD | Нет |
Указывает, что в смежных положениях переключателя сопоставленная ось также сообщит значение 1,0. В примере выше, если установлено значение IncludeAdjacent, преобразование оси выполняется следующим образом:
|
Сопоставление переключателей
Положения переключателя могут быть сопоставлены с набором кнопок в массиве кнопок 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:
|
Значения *ButtonIndex
*Индекс значений ButtonIndex в массиве кнопок RawGameController:
ButtonCount | SwitchKind | RequiredMappings |
---|---|---|
2 | TwoWay |
|
4 | FourWay |
|
4 | EightWay |
|
8 | EightWay |
|
Сопоставление свойств
Это статическое сопоставление значений для различных типов сопоставления.
Сопоставление | Имя значения | Тип значения | Сведения о значении |
---|---|---|---|
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
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по