Données de Registre pour les contrôleurs de jeu

Notes

Cette rubrique s’adresse aux fabricants de contrôleurs de jeu compatibles Windows 10 et ne s’applique pas à la majorité des développeurs.

L’espace de noms Windows.Gaming.Input permet aux fournisseurs de matériel indépendants d’ajouter des données au registre du PC, ce qui permet à leurs appareils d’apparaître en tant que Gamepads, RacingWheels, ArcadeSticks, FlightSticks et UINavigationControllers le cas échéant. Tous les IVS doivent ajouter ces données pour leurs contrôleurs compatibles. Ce faisant, tous les jeux UWP (et tous les jeux de bureau qui utilisent l’API WinRT) seront en mesure de prendre en charge votre contrôleur de jeu.

Schéma de mappage

Les mappages pour un appareil avec l’ID du fournisseur (VID) VVVV, l’ID de produit (PID) PPPP, la page d’utilisation UUUU et l’ID d’utilisation XXXX, seront lus à partir de cet emplacement dans le registre :

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

Le tableau ci-dessous décrit les valeurs attendues sous l’emplacement racine de l’appareil :

Nom Type Requis ? Informations
Désactivé DWORD Non

Indique que cet appareil particulier doit être désactivé.

  • 0 : L’appareil n’est pas désactivé.
  • 1 : L’appareil est désactivé.
Description REG_SZNon Brève description de l’appareil.

Le programme d’installation de votre appareil doit ajouter ces données au Registre (via le programme d’installation ou un fichier INF).

Les sous-clés sous l’emplacement racine de l’appareil sont détaillées dans les sections suivantes.

Boîtier de commande

Le tableau ci-dessous répertorie les sous-clés obligatoires et facultatives sous la sous-clé Gamepad :

Sous-clé Requis ? Informations
Menu Oui Voir Mappage de boutons
Affichage Oui
Un Oui
B Oui
X Oui
O Oui
LeftShoulder Oui
RightShoulder Oui
LeftThumbstickButton Oui
RightThumbstickButton Oui
DPadUp Oui
DPadDown Oui
DPadLeft Oui
DPadRight Oui
Pagaie1 Non
Pagaie2 Non
Pagaie3 Non
Pagaie4 Non
LeftTrigger Oui Consultez Mappage d’axes
RightTrigger Oui
LeftThumbstickX Oui
LeftThumbstickY Oui
RightThumbstickX Oui
RightThumbstickY Oui

Notes

Si vous ajoutez votre manette de jeu en tant que gamepad pris en charge, nous vous recommandons vivement de l’ajouter également en tant qu’interface utilisateur prise en charge UINavigationController.

RacingWheel

Le tableau ci-dessous répertorie les sous-clés obligatoires et facultatives sous la sous-clé RacingWheel :

Sous-clé Requis ? Informations
PreviousGear Oui Voir Mappage de boutons
NextGear Oui
DPadUp Non
DPadDown Non
DPadLeft Non
DPadRight Non
Button1 Non
Button2 Non
Button3 Non
Bouton4 Non
Bouton5 Non
Bouton6 Non
Bouton 7 Non
Button8 Non
Button9 Non
Bouton10 Non
Bouton11 Non
Bouton12 Non
Bouton13 Non
Bouton14 Non
Bouton15 Non
Bouton16 Non
FirstGear Non
SecondGear Non
ThirdGear Non
FourthGear Non
FifthGear Non
SixthGear Non
SeventhGear Non
ReverseGear Non
Roulette Oui Voir Mappage d’axes
Limitation Oui
Frein Oui
Embrayage Non
Handbrake Non
MaxWheelAngle Oui Voir Mappage des propriétés

ArcadeStick

Le tableau ci-dessous répertorie les sous-clés obligatoires et facultatives sous la sous-clé ArcadeStick :

Sous-clé Requis ? Informations
Action 1 Oui Voir Mappage de boutons
Action2 Oui
Action3 Oui
Action4 Oui
Action5 Oui
Action6 Oui
Spécial1 Oui
Spécial2 Oui
Hold-up Oui
StickDown Oui
StickLeft Oui
StickRight Oui

FlightStick

Le tableau ci-dessous répertorie les sous-clés obligatoires et facultatives sous la sous-clé FlightStick :

Sous-clé Requis ? Informations
FirePrimary Oui Voir Mappage de boutons
FireSecondary Oui
Rouleau Oui Voir Mappage d’axes
Inclinaison Oui
Lacet Oui
Limitation Oui
HatSwitch Oui Voir Mappage des commutateurs

UINavigation

Le tableau ci-dessous répertorie les sous-clés obligatoires et facultatives sous la sous-clé UINavigation :

Sous-clé Requis ? Informations
Menu Oui Voir Mappage de boutons
Affichage Oui
Accepter Oui
Annuler Oui
PrimaryUp Oui
PrimaryDown Oui
PrimaryLeft Oui
PrimaryRight Oui
Context1 (Contexte 1) Non
Context2 (Contexte 2) Non
Context3 (Contexte 3) Non
Context4 (Contexte 4) Non
Pg préc Non
Pg suiv Non
PageLeft Non
PageRight Non
ScrollUp (Faire défiler vers le haut) Non
ScrollDown (Faire défiler vers le bas) Non
ScrollLeft (Faire défiler vers la gauche) Non
ScrollRight (Faire défiler vers la droite) Non
SecondaryUp Non
SecondaryDown Non
SecondaryLeft Non
SecondaryRight Non

Pour plus d’informations sur les contrôleurs de navigation de l’interface utilisateur et les commandes ci-dessus, consultez Contrôleur de navigation de l’interface utilisateur.

Keys

Les sections suivantes expliquent le contenu de chacune des sous-clés sous les touches Gamepad, RacingWheel, ArcadeStick, FlightStick et UINavigation .

Mappage de boutons

Le tableau ci-dessous répertorie les valeurs nécessaires pour mapper un bouton. Par exemple, si vous appuyez sur DPadUp sur le contrôleur de jeu, le mappage pour DPadUp doit contenir la valeur ButtonIndex (La source est Button). Si DPadUp doit être mappé à partir d’une position de commutateur, le mappage DPadUp doit contenir les valeurs SwitchIndex et SwitchPosition (La source est Switch).

Source Nom de la valeur Type de valeur Requis ? Informations sur la valeur
Bouton ButtonIndex DWORD Oui Index dans le tableau de boutons RawGameController .
Axe AxisIndex DWORD Oui Index dans le tableau d’axes RawGameController .
Inverser : DWORD Non Indique que la valeur de l’axe doit être inversée avant l’application des facteurs Threshold Percent et DebouncePercent .
ThresholdPercent DWORD Oui Indique la position de l’axe à laquelle la valeur du bouton mappé passe entre les états pressé et libéré. La plage de valeurs valide est comprise entre 0 et 100. Le bouton est considéré comme enfoncé si la valeur de l’axe est supérieure ou égale à cette valeur.
DebouncePercent DWORD Oui

Définit la taille d’une fenêtre autour de la valeur ThresholdPercent , qui est utilisée pour décaper l’état du bouton signalé. La plage de valeurs valide est comprise entre 0 et 100. Les transitions d’état de bouton ne peuvent se produire que lorsque la valeur de l’axe franchit les limites supérieures ou inférieures de la fenêtre de débouchage. Par exemple, un SeuilPercent de 50 et un DebouncePercent de 10 aboutit à des limites de débounce à 45 % et 55 % des valeurs de l’axe de plage complète. Le bouton ne peut pas passer à l’état enfoncé tant que la valeur de l’axe n’a pas atteint 55 % ou plus, et il ne peut pas revenir à l’état libéré tant que la valeur de l’axe n’a pas atteint 45 % ou moins.

Les limites de la fenêtre debounce calculée sont limitées entre 0 % et 100 %. Par exemple, un seuil de 5 % et une fenêtre de débounce de 20 % feraient en sorte que les limites de la fenêtre debounce tombent à 0 % et 15 %. L’état du bouton pour les valeurs d’axe de 0 % et 100 % est toujours signalé comme libéré et appuyé, respectivement, quelles que soient les valeurs de seuil et de débounce.

Commutateur SwitchIndex DWORD Oui Index dans le tableau de commutateurs RawGameController .
SwitchPosition REG_SZ Oui

Indique la position du commutateur qui provoquera le signalement du bouton mappé. Les valeurs de position peuvent être l’une des chaînes suivantes :

  • Haut
  • UpRight
  • Droit
  • DownRight
  • Descendre
  • DownLeft
  • Gauche
  • UpLeft
IncludeAdjacent DWORD Non Indique que les positions de commutateur adjacentes entraînent également le fait que le bouton mappé signale qu’il est en cours d’appui.

Mappage d’axes

Le tableau ci-dessous répertorie les valeurs nécessaires pour mapper un axe :

Source Nom de la valeur Type de valeur Requis ? Informations sur la valeur
Bouton MaxValueButtonIndex DWORD Oui

Index dans le tableau de boutons RawGameController qui est traduit en valeur d’axe unidirectionnel mappé.

MaxButton AxisValue
FALSE 0.0
VRAI 1,0
MinValueButtonIndex DWORD Non

Indique que l’axe mappé est bidirectionnel. Les valeurs de MaxButton et MinButton sont combinées en un seul axe bidirectionnel, comme indiqué ci-dessous.

MinButton MaxButton AxisValue
FALSE FALSE 0.5
FAUX VRAI 1,0
VRAI FALSE 0.0
VRAI VRAI 0.5
Axe AxisIndex DWORD Oui Index dans le tableau d’axes RawGameController .
Inverser : DWORD Non Indique que la valeur de l’axe mappé doit être inversée avant d’être retournée.
Commutateur SwitchIndex DWORD Oui Index dans le tableau de commutateurs RawGameController .
MaxValueSwitchPosition REG_SZ Oui

Une des chaînes suivantes :

  • Haut
  • UpRight
  • Right
  • DownRight
  • Descendre
  • DownLeft
  • Gauche
  • UpLeft

Il indique la position du commutateur qui entraîne le signalement de la valeur de l’axe mappé sous la forme 1.0. La direction opposée de MaxValueSwitchPosition est traitée comme 0.0. Par exemple, si MaxValueSwitchPosition a la valeur Up, la traduction de la valeur de l’axe s’affiche ci-dessous :

Basculer la position AxisValue
Haut 1,0
Center 0.5
Descendre 0.0
IncludeAdjacent DWORD Non

Indique que les positions de commutateur adjacentes entraînent également le signalement 1.0 de l’axe mappé. Dans l’exemple ci-dessus, si IncludeAdjacent est défini, la traduction d’axe s’effectue comme suit :

Basculer la position AxisValue
Haut 1,0
UpRight 1,0
UpLeft 1,0
Center 0.5
Descendre 0.0
DownRight 0.0
DownLeft 0.0

Mappage de commutateurs

Les positions de commutateur peuvent être mappées à partir d’un ensemble de boutons dans le tableau de boutons du RawGameController ou d’un index dans le tableau de commutateurs. Les positions de commutateur ne peuvent pas être mappées à partir d’axes.

Source Nom de la valeur Type de valeur Informations sur la valeur
Bouton ButtonCount DWORD 2, 4 ou 8
SwitchKind REG_SZ TwoWay, FourWay ou EightWay
UpButtonIndex DWORD Voir *Valeurs ButtonIndex
DownButtonIndex DWORD
LeftButtonIndex DWORD
RightButtonIndex DWORD
UpRightButtonIndex DWORD
DownRightButtonIndex DWORD
DownLeftButtonIndex DWORD
UpLeftButtonIndex DWORD
Axe SwitchKind REG_SZ TwoWay, FourWay ou EightWay
XAxisIndex DWORD YAxisIndex est toujours présent. XAxisIndex n’est présent que lorsque SwitchKind est FourWay ou EightWay.
YAxisIndex DWORD
XDeadZonePercent DWORD Indiquez la taille de la zone morte autour de la position centrale des axes.
YDeadZonePercent DWORD
XDebouncePercent DWORD Définissez la taille des fenêtres autour des limites supérieures et inférieures de zone morte, qui sont utilisées pour déboguer l’état de commutateur signalé.
YDebouncePercent DWORD
XInvert DWORD Indiquez que les valeurs d’axe correspondantes doivent être inversées avant que les calculs de la zone morte et de la fenêtre de débouchage ne soient appliqués.
YInvert DWORD
Commutateur SwitchIndex DWORD Index dans le tableau de commutateurs RawGameController .
Inverser : DWORD Indique que le commutateur signale ses positions dans un ordre inverse dans le sens des aiguilles d’une montre, plutôt que dans l’ordre par défaut dans le sens des aiguilles d’une montre.
PositionBias DWORD

Déplace le point de départ de la façon dont les positions sont signalées par le montant spécifié. PositionBias est toujours compté dans le sens des aiguilles d’une montre à partir du point de départ d’origine et est appliqué avant que l’ordre des valeurs ne soit inversé.

Par exemple, un commutateur qui signale des positions commençant par DownRight dans le sens inverse des aiguilles d’une montre peut être normalisé en définissant l’indicateur Invert et en spécifiant une PositionBias de 5 :

Position Valeur signalée Après les indicateurs PositionBias et Invert
DownRight 0 3
Droit 1 2
UpRight 2 1
Haut 3 0
UpLeft 4 7
Gauche 5 6
DownLeft 6 5
Descendre 7 4

*Valeurs ButtonIndex

*L’index des valeurs ButtonIndex dans le tableau de boutons de 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

Mappage des propriétés

Il s’agit de valeurs de mappage statiques pour différents types de mappage.

Mappage Nom de la valeur Type de valeur Informations sur la valeur
RacingWheel MaxWheelAngle DWORD Indique l’angle de roue physique maximal pris en charge par la roue dans une seule direction. Par exemple, une roue avec une rotation possible de -90 degrés à 90 degrés spécifierait 90.

Étiquettes

Les étiquettes doivent être présentes sous la clé Étiquettes sous la racine de l’appareil. Les étiquettes peuvent avoir 3 sous-clés : Boutons, Axes et Commutateurs.

Libellé des boutons

La touche Boutons mappe chacune des positions de bouton dans le tableau de boutons de RawGameController à une chaîne. Chaque chaîne est mappée en interne à la valeur d’énumération GameControllerButtonLabel correspondante. Par exemple, si un boîtier de commande a dix boutons et que l’ordre dans lequel RawGameController analyse les boutons et les présente dans le rapport des boutons est le suivant :

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

Les étiquettes doivent apparaître dans cet ordre sous la touche Boutons :

Nom Valeur (type : REG_SZ)
Button0 Menu
Button1 Affichage
Button2 LeftStickButton
Button3 RightStickButton
Bouton4 Lettera
Bouton5 LetterB
Bouton6 LetterX
Bouton 7 LETTERY
Button8 LeftBumper
Button9 RightBumper

Étiquettes d’axe

La touche Axes mappe chacune des positions d’axe dans le tableau d’axes de RawGameController à l’une des étiquettes répertoriées dans GameControllerButtonLabel Enum , tout comme les étiquettes de bouton. Consultez l’exemple dans Étiquettes de bouton.

Changer d’étiquettes

La touche Commutateurs mappe les positions des commutateurs aux étiquettes. Les valeurs suivent cette convention de nommage : pour étiqueter une position d’un commutateur dont l’index est x dans le tableau de commutateurs de RawGameController, ajoutez ces valeurs sous la sous-clé Commutateurs :

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

Le tableau suivant montre un exemple d’ensemble d’étiquettes pour les positions de basculement d’un commutateur à 4 voies qui s’affiche à l’index 0 dans RawGameController :

Nom Valeur (type : REG_SZ)
Switch0Up XboxUp
Switch0Right XboxRight
Switch0Down XboxDown
Switch0Left XboxLeft

Exemple de fichier de Registre

Pour montrer comment tous ces mappages et valeurs se réunissent, voici un exemple de fichier de registre pour un RacingWheel générique :

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

Voir aussi