> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Claviers et souris dans GameInput

> Claviers et souris dans GameInput

Utilisez cette rubrique pour comprendre les usages propres aux claviers et aux souris. Les claviers et les souris sont des entrées natives de `GameInput`.

## Entrée clavier

La méthode [GetKeyState](/fr/reference/input/gameinput/interfaces/igameinputreading/methods/igameinputreading_getkeystate) récupère le code de balayage et les données de touche virtuelle de chaque touche enfoncée d'un clavier. Ces données d'entrée sont ensuite renvoyées sous la forme d'un tableau de longueur variable de structures [GameInputKeyState](/fr/reference/input/gameinput/structs/gameinputkeystate). Une touche enfoncée est une touche maintenue au moment où le clavier a signalé une entrée. La fréquence à laquelle les claviers signalent les entrées varie, généralement de 125 Hz à 1 000 Hz. L'état du clavier est signalé séparément pour chaque clavier connecté au système.

L'état rudimentaire du clavier est destiné à associer l'entrée clavier à des actions de jeu, comme le déplacement ou le tir d'une arme. Il n'est pas destiné à la saisie de texte normale ni aux autres API utilisées à cette fin.

### Lecture de l'état des touches

Utilisez le code suivant pour implémenter `GameInput` pour les claviers et les souris dans votre titre.

```c++ theme={null}
uint32_t GetKeyState(
    uint32_t stateArrayCount,
    GameInputKeyState* stateArray
)

typedef struct  GameInputKeyState
{
    uint32_t scanCode;
    uint32_t codePoint;
    uint8_t virtualKey;
    bool isDeadKey;
} GameInputKeyState;
```

L'état de chaque touche n'est pas stocké à un index fixe dans le tableau. Au contraire, le nombre d'éléments valides du tableau augmente à mesure que des touches sont enfoncées. Le tableau se réduit lorsque des touches sont relâchées. Les nouvelles touches sont ajoutées à la fin du tableau et, lorsqu'une touche est relâchée, tous les éléments sont décalés vers le bas pour combler l'espace. [GetKeyCount](/fr/reference/input/gameinput/interfaces/igameinputreading/methods/igameinputreading_getkeycount) renvoie le nombre de touches enfoncées, comme illustré dans le code suivant. Cela permet de déterminer la taille du tableau à allouer pour [GetKeyState](/fr/reference/input/gameinput/interfaces/igameinputreading/methods/igameinputreading_getkeystate). Si le `stateArray` transmis à [`GetKeyState`](/fr/reference/input/gameinput/interfaces/igameinputreading/methods/igameinputreading_getkeystate) est plus grand que le nombre de touches enfoncées, les éléments excédentaires du tableau ne sont ni écrits ni mis à zéro. À l'inverse, si `stateArray` est plus petit que le nombre de touches enfoncées, le tableau est rempli et les touches enfoncées excédentaires sont ignorées.

```c++ theme={null}
uint32_t GetKeyCount()
```

Les claviers standard ne peuvent signaler que quatre à six appuis de touche à la fois, et même les claviers de jeu haut de gamme prennent rarement en charge plus de 12 à 16 touches simultanément. Ainsi, l'utilisation de `GetKeyCount` permet de garder une taille maximale de tableau réduite. La taille maximale peut être interrogée via l'interface [IGameInputDevice](/fr/reference/input/gameinput/interfaces/igameinputdevice/igameinputdevice).

Notez que le membre `codePoint` spécifie le glyphe que le système pense être imprimé sur la touche associée, en fonction de la disposition de clavier actuelle. Il est destiné à afficher une représentation de la touche dans une interface de mappage des entrées, et non à construire des chaînes de saisie de texte.

## Entrée souris

La méthode [GetMouseState](/fr/reference/input/gameinput/interfaces/igameinputreading/methods/igameinputreading_getmousestate) récupère l'état de déplacement et des boutons d'une souris, qui est renvoyé dans une seule structure [GameInputMouseState](/fr/reference/input/gameinput/structs/gameinputmousestate), comme illustré dans le code suivant. Comme l'état du clavier, l'état de la souris est signalé séparément pour chaque souris connectée au système. \<!--As with keyboard input, the [CreateAggregateDevice](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_createaggregatedevice) method on the `IGameInput` interface is used to get the combined system mouse state.> -->

```c++ theme={null}
bool GetMouseState(
    GameInputMouseState* state
)

typedef struct GameInputMouseState
{
    GameInputMouseButtons buttons;
    int64_t positionX;
    int64_t positionY;
    int64_t wheelX;
    int64_t wheelY;
} GameInputMouseState;

typedef enum GameInputMouseButtons
{
    GameInputMouseNone          = 0x00000000,
    GameInputMouseLeftButton    = 0x00000001,
    GameInputMouseRightButton   = 0x00000002,
    GameInputMouseMiddleButton  = 0x00000004,
    GameInputMouseButton4       = 0x00000008,
    GameInputMouseButton5       = 0x00000010,
    GameInputMouseWheelTiltLeft = 0x00000020,
    GameInputMouseWhelTiltRight = 0x00000040
} GameInputMouseButtons;
```

### Lecture des déplacements de la souris

Les déplacements de la souris sont signalés nativement sous la forme d'une série de valeurs delta, plutôt que sous la forme d'une position absolue. Cela n'est pas compatible avec la nature d'interrogation de [`GetCurrentReading`](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_getcurrentreading), car demander périodiquement la lecture actuelle de la souris risque de manquer plusieurs deltas intermédiaires.

Plutôt que d'utiliser [GetNextReading](/fr/reference/input/gameinput/interfaces/igameinput/methods/igameinput_getnextreading) pour parcourir potentiellement des dizaines de lectures historiques de la souris et additionner les deltas, ceux-ci sont cumulés dans des valeurs virtuelles `positionX` et `positionY`. À partir de là, les deltas sont calculés en soustrayant les valeurs `positionX` et `positionY` des lectures précédemment obtenues. Les deltas individuels sont accessibles en parcourant toutes les lectures intermédiaires, ou via les deltas cumulés lorsque des lectures intermédiaires ont été ignorées.

Les valeurs `positionX` et `positionY` sont la somme de tous les deltas de déplacement. Ces valeurs ne sont en aucun cas corrélées aux coordonnées de l'espace écran. La valeur delta cumulée ne concerne que les événements de souris qu'un processus reçoit lorsqu'il a le focus d'entrée.

## Association d'utilisateur

L'association d'utilisateur n'est actuellement pas prise en charge pour les claviers et les souris. Il n'existe aucune interface permettant d'associer l'un de ces périphériques à un utilisateur.

<a id="seeAlsoSection" />

## Documentation de référence de l'API

* [GameInput (contenu de l'API)](/fr/reference/input/gameinput/gameinput_members)
  * Structures
    * [GameInputKeyState](/fr/reference/input/gameinput/structs/gameinputkeystate)
    * [GameInputMouseState](/fr/reference/input/gameinput/structs/gameinputmousestate)

## Voir aussi

[Lectures GameInput](/fr/build/core-features/common/input/overviews/input-readings)

[Périphériques GameInput](/fr/build/core-features/common/input/overviews/input-devices)

[Rubriques avancées sur GameInput](/fr/build/core-features/common/input/advanced/input-advanced-topics)

[Référence de l'API d'entrée](/fr/build/core-features/common/input/gc-input-toc)


## Related topics

- [Étiquettes de fonctionnalités d'accessibilité](/fr/build/game-principles/accessibility/accessibility-feature-tags.md)
- [Cas de test les plus souvent en échec](/fr/publishing/certification/xr-top-failing.md)
- [Aperçu de Windows et ROG XBOX Ally](/fr-CA/paths/windows/overview.md)
- [Vue d'ensemble de Windows & ROG XBOX Ally](/fr/paths/windows/overview.md)
- [Guides de portage vers le GDK XBOX](/fr/home/build-first-title/porting-guides.md)
