Данные реестра для игровых устройств управления
Примечание
Этот раздел предназначен для производителей игровых контроллеров, совместимых с 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 |
Указывает, что конкретное устройство должно быть отключено.
|
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 :
Подраздел | Обязательное? | Сведения |
---|---|---|
Назад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 :
Подраздел | Обязательное? | Сведения |
---|---|---|
Действие 1 | Да | См. сопоставление кнопки |
Действие2 | Да | |
Действие3 | Да | |
Действие4 | Да | |
Действие5 | Да | |
Действие6 | Да | |
Специальные1 | Да | |
Специальные2 | Да | |
Закрепление | Да | |
StickDown | Да | |
StickLeft | Да | |
StickRight | Да |
В таблице ниже перечислены обязательные и необязательные подразделы в подразделе FlightStick :
Подраздел | Обязательное? | Сведения |
---|---|---|
FirePrimary | Да | См. сопоставление кнопки |
FireSecondary | Да | |
Рулон | Да | См. сопоставление осей |
Тон | Да | |
Рыскать | Да | |
Регулирование | Да | |
HatSwitch | Да | См. сопоставление переключателей |
В таблице ниже перечислены обязательные и необязательные подразделы в подразделе 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 | Да |
Указывает положение переключателя, которое приведет к тому, что сопоставленная кнопка будет сообщать о том, что она нажимается. Значения позиции могут быть одной из следующих строк:
|
|
IncludeAdjacent | DWORD | No | Указывает, что смежные позиции переключателя также вызывают сопоставленную кнопку, чтобы сообщить о том, что она нажимается. |
В таблице ниже перечислены значения, необходимые для сопоставления оси:
Исходный код | Имя значения | Тип значения | Обязательное? | Сведения о значении | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Кнопка | MaxValueButtonIndex | DWORD | Да |
Индекс в массиве кнопок RawGameController , который преобразуется в сопоставленное значение однонаправленной оси.
|
|||||||||||||||
MinValueButtonIndex | DWORD | No |
Указывает, что сопоставленная ось двунаправленна. Значения MaxButton и MinButton объединяются в одну двунаправленную ось, как показано ниже.
|
||||||||||||||||
Axis | AxisIndex | DWORD | Да | Индекс в массиве осей RawGameController . | |||||||||||||||
Инвертировать | DWORD | No | Указывает, что сопоставленное значение оси должно быть инвертировано перед возвратом. | ||||||||||||||||
Switch | SwitchIndex | DWORD | Да | Индекс в массиве коммутаторов RawGameController . | |||||||||||||||
MaxValueSwitchPosition | REG_SZ | Да |
Одна из следующих строк:
Указывает положение переключателя, которое приводит к тому, что значение сопоставленной оси будет сообщаться как 1.0. Противоположное направление MaxValueSwitchPosition рассматривается как 0,0. Например, если MaxValueSwitchPosition находится вверх, то ниже показано преобразование значений оси:
|
||||||||||||||||
IncludeAdjacent | DWORD | No |
Указывает, что смежные позиции коммутатора также приводят к тому, что сопоставленная ось будет сообщать 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 | ||||||||||||||||||||||||||||
Axis | 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 | Укажите, что соответствующие значения оси должны быть перевернуты до применения мертвых зон и вычислений окон дебоunce. | |||||||||||||||||||||||||||
YInvert | DWORD | ||||||||||||||||||||||||||||
Switch | SwitchIndex | DWORD | Индекс в массиве коммутаторов RawGameController . | ||||||||||||||||||||||||||
Инвертировать | DWORD | Указывает, что переключатель сообщает о своих позициях в порядке по часовой стрелке, а не по умолчанию. | |||||||||||||||||||||||||||
PositionBias | DWORD |
Сдвигает начальную точку того, как позиции передаются указанным объемом. PositionBias всегда подсчитывается по часовой стрелке от исходной начальной точки и применяется перед обратным порядком значений. Например, переключатель, который сообщает о позициях, начиная с DownRight в порядке счетчика по часовой стрелке, можно нормализовать, установив флаг Инверта и указав позицию PositionBias из 5:
|
*ButtonIndex values index in the RawGameController's button array:
ButtonCount | SwitchKind | RequiredMappings |
---|---|---|
2 | TwoWay |
|
4 | FourWay |
|
4 | ВосемьWay |
|
8 | ВосемьWay |
|
Это статические значения сопоставления для разных типов сопоставления.
Сопоставление | Имя значения | Тип значения | Сведения о значении |
---|---|---|---|
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