Bonjour à vous tous et merci d'avance pour votre aide.

Voici un code que j'ai repris d'un tutorial, qui test le temps d'inactivité de l'utilisateur. J'ai adpaté le code, pour affiché un msgbox aprés 5 secondes d'inactivité.

Le msgbox s'affiche normalement aprés 5 secondes d'inactivité, mais pour une raison qui m'échappe. Le msgbox s'affiche à plusieurs reprise en un instant. Comment faire pour qu'il s'affiche juste une fois.

Timer "CCTimerMain"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    Private Sub CCTimerMain_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CCTimerMain.Tick
             If IsInputIdle(Val(5)) Then
 
            MsgBox("Inactif")
 
        End If
    End Sub
MODULE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Option Strict Off
Option Explicit On
Module ModMain
 
    'UPGRADE_WARNING: La structure LASTINPUTINFO peut nécessiter que des attributs de marshaling soient passés en tant qu'argument dans cette instruction Declare. Cliquez ici*: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="C429C3A5-5D47-4CD9-8F51-74A1616405DC"'
    Private Declare Function GetLastInputInfo Lib "user32.dll" (ByRef plii As LASTINPUTINFO) As Integer
    Private Declare Function GetTickCount Lib "kernel32.dll" () As Integer
 
    Private Structure LASTINPUTINFO
        Dim cbSize As Integer
        Dim dwTime As Integer
    End Structure
 
    '# Permet de savoir si l'utilisateur est considéré comme absent. L'intervalle est en secondes
    Public Function IsInputIdle(ByVal vIdleTimeout As Integer) As Boolean
        Dim LII As LASTINPUTINFO
        LII.cbSize = Len(LII)
        If GetLastInputInfo(LII) <> 0 Then
            IsInputIdle = (GetTickCount - LII.dwTime) > (1000 * vIdleTimeout)
        End If
    End Function
End Module

Merci.