La gestion de la souris s'avère légèrement plus complexe. Nous utiliserons ici les événement de la souris pour récupérer les déplacements de celle-ci. Voici les différentes étapes :
Comme pour le clavier, on déclare et instancie une variable de type Device. On passe comme paramètre le type du device : SystemGuid.Mouse
Device _deviceSouris = new Device(SystemGuid.Mouse);
Les niveaux de coopérativité sont les mêmes que le clavier : Exclusive / NonExclusive et Foreground / Background :
CooperativeLevelFlags _coopLevel; _coopLevel = CooperativeLevelFlags.Exclusive; _coopLevel |= CooperativeLevelFlags.Foreground;
On applique ensuite 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 :
_deviceSouris.SetCooperativeLevel(this, _coopLevel);
La souris étant gérée de manière événementielle, il faut initialiser la notification d'événements. Pour cela, nous devons dans un premier temps ajouter trois propriétés :
privateThread _threadSouris =null;privateAutoResetEvent _threadEvenementSouris =null;private delegate void_recupereEtatSouris();
_threadSouris est un thread qui va éxecuter parallèlement EvenementSouris() (expliqué ci-dessous)
_threadEvenementSouris est une variable qui va nous permettre d'initialiser la notification d'événement du device
_recupereEtatSouris() est une fonction de délégation qui va exécuter parallèlement VerifieEtatSouris() permettant de vérifier l'état de la souris (expliqué au chapitre 3.5).
Au niveau de l'initialisation du device, nous pouvons maintenant lancer le thread et initialiser la notification d'événements :
this._threadSouris =newThread(newThreadStart(this.EvenementSouris));this._threadSouris.Start();this._threadEvenementSouris =newAutoResetEvent(false);this._deviceSouris.SetEventNotification(this._threadEvenementSouris);
Nous allons créer la fonction d'événement. Celle-ci va s'exécuter tant que votre form existe, mettra à jour les informations du device grâce à la methode Pool() et lancera la vérification de l'état de la souris :
private voidEvenementSouris() {while(this.Created) {this._threadEvenementSouris .WaitOne(-1,false);
try{// On met à jour les informations du devicethis._deviceSouris.Poll(); }catch(InputException) {continue; }this.BeginInvoke(newthis._recupereEtatSouris(this.VerifieEtatSouris)); } }
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.
_deviceSouris.Acquire();
Nous allons voir ici la fonction VerifieEtatSouris() exécutée par la fonction de délégation précédement déclarée.
Il faut dans un premier temps récupérer l'état de la souris à l'aide de la méthode GetCurrentMouseState().
MouseState EtatSouris = _deviceSouris.GetCurrentMouseState();
Nous pouvons ensuite accéder aux propriétés et méthodes de la souris :
EtatSouris.X// Renvoie un entier correspondant au déplacement horizontalEtatSouris.Y// Renvoie un entier correspondant au déplacement verticalEtatSouris.GetMouseButtons()// Renvoie un tableau de byte de l'état des boutons (0 inactif, 1 appuyé)
X et Y ne correspondent pas aux coordonnées mais bien aux déplacements de la souris à partir du point en haut à gauche de l'écran. Exemple : X = 100, Y = -100 : la souris se déplace en haut à droite.