IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Probléme code "Temps d'inactivité"


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut Probléme code "Temps d'inactivité"
    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.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    tu testes si c'est inactif dans un timer
    donc à chaque tick de ton timer ca vérifie si ca fait plus de 5 secondes que c'est inactif, c'est le cas donc un message, etc...

    si c'est inactif, tu peux désactiver ton timer, et le réactiver dès qu'on fait quelque chose
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    J'ai pourtant essayer mais ça ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          If IsInputIdle(Val(5)) Then
                MsgBox("Inactif")
                CCTimerMain.Stop()
            End If
    J'ai même essayer avec "enabled = false"

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Peut-être, une idée de solution du coté de l'événement OnIdle de l'Application : si on lance ou relance le timer d'inactivité sur cet événement.
    Ca marche à 99%. Le 1% correspond à des situations où l'appli a été inactive pendant presque tout l'intervalle et qu'elle soit réactivée immédiatement avant la fin (dans ce cas, l'event timer est empilé et traité avant le prochain OnIdle).

    Sinon, reste implémenter un Mouse hook et un keyboard hook

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Excuse moi, mais concrétement je dois mettre quoi comem code pour jouer sur le OnIdle ?
    Et ce code n'est pas un Mouse hook et key hook déjà ?

    Merci à toi.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    concrétement je dois mettre quoi comem code pour jouer sur le OnIdle ?
    Tu enregistres le TickCount courant dans le OnIdle.
    Ensuite, dans l'event timer, tu compares si la différence entre tickcount courant et celui enregistré dans le OnIdle est supérieure au temps d'inactivité.
    Et ce code n'est pas un Mouse hook et key hook déjà ?
    Oui, c'est ce que fait le GETLASTINPUTINFO pour toute activité de l'utilisateur sur le PC.
    Mais j'ai un doute tout d'un coup : veux-tu détecter l'inactivité globale du PC ou seulement de l'appli ?
    J'aurais du (me) poser la question avant ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème "LoadModule ssl_module modules/mod_ssl.so"
    Par ldcarpathes dans le forum Apache
    Réponses: 9
    Dernier message: 24/01/2008, 11h07
  2. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo