FR | EN
Page générée en 0.16 sec
Imprimer

Gestion du clavier

Avant de commencer à utiliser les bibliothèques de DirectInput, vous devez rajouter deux using :

using Microsoft.DirectX;
using Microsoft.DirectX.DirectInput;

Plusieurs étapes sont nécessaires afin de pouvoir gérer le clavier avec DirectInput :

  • Instanciation de l'objet Device au format du clavier
  • Définition des paramètres de comportement du clavier (Cooperative Level)
  • Acquisition de l'accès au clavier
  • Récupération des entrées du clavier

1. Instanciation de l'objet Device au format du clavier

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);

2. Définition des paramètres de comportement du clavier (Cooperative Level)

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é.

3. Acquisition de l'accès au clavier

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();

4. Récupération des entrées du clavier

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.

W3C - XHTML 1.0 Powered By Fedora W3C - CSS