Avant de commencer à utiliser les bibliothèques de DirectInput, vous devez rajouter deux using :
usingMicrosoft.DirectX;usingMicrosoft.DirectX.DirectInput;
Plusieurs étapes sont nécessaires afin de pouvoir gérer le clavier avec DirectInput :
On doit déclarer et instancier une variable de type Device. On passe comme seul paramètre le type du device : SystemGuid.Keyboard
Device _deviceClavier = new Device(SystemGuid.Keyboard);
Le niveau de coopérativité permet de déterminer comment le device doit interagir avec le système et les autres applications DirectInput. On va pouvoir définir plusieurs paramètres dont :
Exclusive / NonExclusive : Le mode Exclusive ne va pas empécher les autres applications d'utiliser le clavier mais bloquera les touches du clavier. Seul votre objet Device vous permettra de récupérer les entrées du clavier dans votre application.
Foreground / Background : Le mode Foreground signifie que votre application aura accès au clavier uniquement si celle-ci a le focus. Quand le focus sera perdu, le device sera non disponible dans l'application. Le mode Background signifie que le device peut être utilisé par l'application à n'importe quel moment. Exemple :
CooperativeLevelFlags _coopLevel; _coopLevel = CooperativeLevelFlags.Exclusive; _coopLevel |= CooperativeLevelFlags.Foreground;
Il faut ensuite appliquer ces paramètres au device à l'aide de la méthode SetCooperativeLevel() prenant en paramètre la Form utilisée par l'application et le CooperativeLevel :
_deviceClavier.SetCooperativeLevel(this, _coopLevel);
ATTENTION : Pour des raisons de sécurité, l'accès au clavier en mode Background Exclusive n'est pas autorisé.
On obtient l'accès au device grâce à la méthode Acquire(). Suivant les CooperativeLevel que vous avez sélectionnés, si la fenêtre perd le focus l'acquisition peut être perdue.
_deviceClavier.Acquire();
Il faut dans un premier temps récupérer l'état du clavier à l'aide de la méthode GetCurrentKeyboardState().
KeyboardState _etatClavier = _deviceClavier.GetCurrentKeyboardState();
Vous ne pouvez récupérer les infos que si vous y avez accès. Pour éviter tout problème, placer un try() catch() et essayer de ré-acquérir l'accès au clavier.
Il suffit ensuite de faire une boucle qui va vérifier l'état des touches par rapport à une énumération de touches (Key) en commençant par Escape. L'exemple suivant affiche les touches enfoncées :
for(Key k = Key.Escape ; k <= Key.MediaSelect ; k++) {if(_etatClavier[k]) { System.Windows.Forms.MessageBox.Show(k.ToString()); } }
Vous pouvez enfin créer un timer qui vérifiera selon un intervalle de temps les entrées du clavier.