Detecter une NON action ... [Résolu]

Signaler
Messages postés
37
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
14 mars 2011
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
bonjours à tous et à toutes,

Ne sachant pas dans quelle rubrique classer se message je l'ai donc mis ici (ne sachant pas avec quel outil solutionner mon problème)

j'ai donc fait un programme dans lequel on doit être logger pour s'en servir. je souhaite pouvoir déconnecter un utilisateur s'il n'y a aucune action de faite sur le programme au bout de par exemple 10 minutes.

Est-il possible de réaliser cela? et si oui comment ?

Merci pour le temps que vous m'accorderez.

http://les-baladins.org   Le site du spectacle.

10 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
j'ai ca en VB6

http://www.vbfrance.com/codes/TESTER-PRESENCE-UTILISATEUR-ISINPUTIDLE_34319.aspx

a toi de porter en .Net

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
37
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
14 mars 2011

J'ai cherché sur le net et j'ai traduit de vb6 a vb.net mais je ne réussi pas à saisir clairement son fonctionnement et a partir d'où je peux appeler la fonction pour qu'elle me permette au bout du vIdleTimeout de dix minutes de déconecté l'utilisateur.

Merci pour votre temps.

Alexandre

http://les-baladins.org   Le site du spectacle.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
Windows stocke l'heure de derniere saisie clavier, de dernier deplacement souris.
on récupère l'info et on compare avec l'intervalle attendu.

pour jouer avec :

place un Timer avec l'interrvalle d'une seconde, par exemple, et :

If IsInputIdle(10 * 60) Then
    ... Action !!
End If

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
37
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
14 mars 2011

c'est de nouveau avec un nouveau problème!

J'ai donc créé un timer comme vous me l'avais dis seulement les deux variable LII.dwTime et LII.cbSize reste toujours respectivement bloquées à 0 et 16.
j'ai essayer de changer le type dans les déclarations des API et de ces variables mais rien y fait...

Maintenant que je commence à mieux comprendre votre code je bloque encore...

Merci de votre temps et de votre aide.

http://les-baladins.org   Le site du spectacle.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
quel est ton code ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
37
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
14 mars 2011

Pour tester le code je l'ai mis dans une form et donc voici le code:
____________________________________________________________
Imports System.Runtime.InteropServices

Public Class Form1

    Private Declare Function GetLastInputInfo Lib "user32.dll" (ByRef plii As LASTINPUTINFO) As Long 'testé en Uint32
    Private Declare Function GetTickCount Lib "kernel32.dll" () As Long 'testé en Uint32
____________________________________________________________
    Private Structure LASTINPUTINFO
        Dim cbSize As Long 'testé en Uint32
        Dim dwTime As Long
    End Structure 'testé en Uint32
___________________________________________________________
    ' Permet de savoir si l'utilisateur est considéré comme absent. L'intervalle est en secondes
    Public Function IsInputIdle(ByVal vIdleTimeout As Long) As Boolean
        Dim LII As LASTINPUTINFO

        LII.cbSize = Len(LII)
        If GetLastInputInfo(LII) <> 0 Then
            IsInputIdle = (GetTickCount - LII.dwTime) > (vIdleTimeout)
        End If

    End Function
____________________________________________________________
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If IsInputIdle(1) Then
            MsgBox("ouf")
        End If

    End Sub
____________________________________________________________
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Timer1.Enabled = True

    End Sub

End Class
____________________________________________________________

Merci encore de votre aide.

Alexandre.
http://les-baladins.org   Le site du spectacle.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
les Long de VB6 deviennent des Integers en .Net.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
37
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
14 mars 2011

C'est bien ce que j'ai fais: changer le long en integer mais les deux variable garde toujours la même valeur 0 et 16 en long et 0 et 8 en integer.
j'ai aussi déclaré les api en integer pour voir mais çà ne change rien.

Je ne comprend pas ...

http://les-baladins.org   Le site du spectacle.
Messages postés
37
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
14 mars 2011

J'ai compris: j'avais réglé le temps d'inactivité à 1 milliseconde (j'avais retiré le 1000*).
Je vous remercies vraiment du temps que vous avez pris pour m'aider. Et pour m'être utile, ce code, il l'est !!!

J'ai mis un 10/10 autant pour le code que pour votre disponibilité!

Encore merci !

Alexandre

http://les-baladins.org   Le site du spectacle.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
Merci et bonne continuation

Renfield
Admin CodeS-SourceS- MVP Visual Basic