Détection de l'activité du curseur de la souris

Description

J'avais besoin de déclencher des actions si l'utilisateur ne bougeait pas sa souris depuis X secondes et comme je n'ai pas trouvé d'exemple ou des trucs bien trop compliqués, je me suis lancé dans ce petit programme.
Le programme détecte donc que le curseur ne bouge plus
Si le curseur ne bouge plus depuis un temps défini en secondes alors il effectue une action

Source / Exemple :


Public Class Form1

#Region "Déclarations"

    'Variable qui contiendra la position du curseur
    Dim Old_Point As System.Drawing.Point

    'Variable qui permet de connaitre le temps sans mouvement de curseur
    Dim Nb_Sec_Inactivity As Integer = 0

    'Temps d'inactivité en secondes avant action
    Dim Conf_Expiration As Integer = 10

#End Region

#Region "Chargement Formulaire"

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'On lance les deux compteurs qui permettent de savoir si le curseur à bougé
        Timer1.Start()
        Timer2.Start()

    End Sub

#End Region

#Region "TimerTick"

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'Enregistre la position courante du curseur
        Old_Point = Cursor.Position
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        'Si la position relevé précedemment est identique à l'actuelle alors le curseur ne bouge plus
        If Old_Point = Cursor.Position Then
            Label1.Text = "Le curseur ne bouge plus depuis " + Nb_Sec_Inactivity.ToString + " secondes"

            'On lance le compteur avant action si celui-ci n'est pas deja actif
            If Not Timer3.Enabled Then
                Timer3.Start()
            End If
        Else
            'Si la position du curseur courante est différente du relevé précedent alors le curseur bouge
            'Si le curseur bouge alors on remet le compteur du temps d'inactivité à zéro et on arrete le compteur de temps d'inactivité
            Label1.Text = "Le curseur bouge"
            Nb_Sec_Inactivity = 0
            Timer3.Stop()
        End If
    End Sub

    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        'On incrémente d'une seconde le compteur d'inactivité avant action
        Nb_Sec_Inactivity = Nb_Sec_Inactivity + 1

        'Si le temps sans activité est égal ou supérieur (normalement impossible) alors je lance mes actions
        If Nb_Sec_Inactivity >= Conf_Expiration Then

            'On affiche l'information que la souris n'a pas bougé depuis X secondes
            Label3.Text = "Le curseur n'a pas bougé depuis " + Nb_Sec_Inactivity.ToString + " secondes, la session va être fermée"

            'On remet le compteur du temps d'inactivité à 0
            Nb_Sec_Inactivity = 0

            'On arrete tous les compteurs
            Timer1.Stop()
            Timer2.Stop()
            Timer3.Stop()

            'On lance l'action de son choix ici

            ''''''''''''''''''''' ACTION '''''''''''''''''''

            MsgBox("Session expirée")

            ''''''''''''''''''''' ACTION '''''''''''''''''''
        End If
    End Sub

#End Region

End Class

Conclusion :


J'ai essayé de commenter au maximum, et d'être le plus clair possible, le formulaire est la pour exemple, si ça peut aider à comprendre le fonctionnement c'est toujours ça.
Si vous avez besoin d'explication n'hésitez pas.
J'accepte aussi les conseils pour améliorer le code.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.