Verrouiller une application en VB.NET

Signaler
Messages postés
45
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juillet 2013
-
Messages postés
45
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juillet 2013
-
Bonjour tout le monde,
Je travaille sur une application en VB.NET et j'aimerais savoir s'il est possible de passer à un écran d'éveil et verrouiller mon application juste après quelques minutes pendant lesquelles je ne l'ai plus utilisé,l'application ayant été restée ouverte pendant ce temps précis??
Merci d'avance!!!

11 réponses


Bonjour,
un écran d'éveil

Tu veux dire 'un écran de veille'?

Il y a un paquet de sources à ce propos dans la recherche...
comme:
http://www.vbfrance.com/codes/VBNETSCREENSAVER2-ECRAN-VEILLE-CONFIGURABLE-MINIMAL-VB-NET_2425.aspx
Par exemple, sinon cherche aussi du coté de "screen saver"


CF2i - Guadeloupe
Ingénierie Informatique

Bonsoir,

Et pour verrouiller ton application, tu peux placer tous les contrôles de ton formulaire sur un panel (à placer sur le formulaire pour tester l'exemple) et affecter sa propriété Enabled à False au bout d'un certain temps.
Bien évidement, il faut prendre en compte les moindres mouvements de souris ou frappes au clavier afin de ne décompter le temps qu'à partir du moment où il ne se passe rien.
Pour cela, il faudra pré-filtrer les messages systèmes (clavier/souris) reçus par le formulaire.
C'est pourquoi, la classe du formulaire devra implémenter l'interface IMessageFilter
Un timer (à placer sur le formulaire pour tester l'exemple) se chargera d'égrener les secondes afin de gérer l'intervalle de temps alloué avant le verrouillage de l'application.
La variable m_blocage n'est là que pour une meilleure visibilité du code.
On pourrait très bien tester la valeur Enabled du panel.

Option Strict On
Public Class Form1
    'implémentation de l'interface IMessageFilter
    'remarque : après avoir tapé ce qui suit et appuyé sur entrée, l'ide Visual Basic
    '           écrit lui même l'ossature de la fonction PrefilterMessage (ci-dessous).
    '           Il reste juste à coder le contenu de cette fonction soi-même.
    Implements IMessageFilter

    'variables messages clavier/souris
    Const WM_KEYDOWN As Integer = &H100
    Const WM_MOUSEMOVE = &H200

    'variable d'état de blocage
    Dim m_blocage As Boolean

    'intervalle de temps à mémoriser
    Dim temps As TimeSpan

    'l'utilisateur presse une touche (réactivation) ....
    'bien sûr, ici on peu demander un login/password etc...
    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        's'il y a un blocage, je réactive mon panel et je recommence le filtrage des messages
        'recus par mon formulaire
        If m_blocage Then
            m_blocage = False
            Panel1.Enabled = True
            Application.AddMessageFilter(Me)
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'ajout d'un filtre messages sur le formulaire
        Application.AddMessageFilter(Me)
        'oblige le formulaire à intercepter les messages clavier (réactivation)
        Me.KeyPreview = True
        'paramétrage du timer sur une seconde et démarrage
        Timer1.Interval = 1000
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        's'il n'y a pas de blocage
        If Not m_blocage Then
            'je vérifie que mon intervalle de temps et l'heure système soient les mêmes
            'Remarque: Equals renvoie un booléen
            If DateTime.Equals(temps, New TimeSpan(Now.Hour, Now.Minute, Now.Second)) Then
                'je retire le filtre des messages
                Application.RemoveMessageFilter(Me)
                'je rends tous les contrôles placés sur mon panel indisponibles (verrouillage)
                Panel1.Enabled = False
                'je place le focus sur le formulaire (afin qu'il puisse intercepter le KeyPress de réactivation)
                Me.Focus()
                m_blocage = True
            End If
        End If
    End Sub

    Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
        's'il n'y a pas de blocage
        If Not m_blocage Then
            'j'intercepte tout mouvement de souris ou frappe au clavier
            If (m.Msg WM_KEYDOWN) Or (m.Msg WM_MOUSEMOVE) Then
                'je définis un nouvel intervalle de temps (maintenant + 5 secondes)
                temps = New TimeSpan(Now.Hour, Now.Minute, Now.Second + 5)
            End If
        End If
        Return False
    End Function
End Class


Bonne prog.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,

Vous êtes fâché avec la fonction GetLastInputInfo de la librairie User32 de l'Api de Windowsz ?

Je l'utilise fréquemment (avec VB6, mais je ne vois pas pourquoi pas avec le même succès avec un autre langage) et trouve qu'elle fonctionne bien.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Bonsoir ucfoutu,
GetLastInputInfo de la librairie User32 de l'Api de Windows

C'est parce qu'il faut éviter les Api autant que possible. Elles pourront être "deprecated" en fonction des humeurs futures de la firme de bill (c'est ce que j'ai lu dans mon bouquin de programmation).

Dans le cadre d'une application VB6, les API de windows étaient souvent sollicitées pour deux principales raisons : obtenir de bonnes performances et contourner les limitations inhérentes à ce langage en termes de fonctionnalités.
Du fait que les classes du Framework .NET ont pour vocation de couvrir une plage de fonctionnalités de plus en plus vaste, avec une approche beaucoup plus fiable, sans risque d'obsolescence et des performances toujours accrues au fil des versions, le recours aux API tend à disparaître.
Elles restent néanmoins disponibles, principalement dans l'optique de faciliter la migration du code existant.

Voilà pour l'information

Bonne soirée.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour banana32,

J'ai donc cherché un peu ===>>
PCPT aurait-il donc été imprudent de déposer Ce code-là ?
Il est pourtant en général très avisé.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Peut-être nous donnera t-il son avis ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Oui..
Je pense d'ailleurs que s'il passait par là, il exposerait probablement les avantages et les inconvénients des différentes méthodes possibles.
Probablement quelque-chose du genre de Ce qui est fort bien exposé ICI


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
45
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juillet 2013

Bonjour tout le monde,
Merci a tous pour vos suggestions. J'ai déjà réussi a verrouiller mon application grâce a un lien que j'ai visité
http://www.developpez.net/forums/d836580/dotnet/langages/vb-net/probleme-code-temps-dinactivite-reso
www.developpez.net
Et ca marche très bien!!!
Pour ce qui est de l'écran de veille,je te dis merci acive.Je vais de ce pas sur ce lien en espérant que ca marchera.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Ben !
Tu as donc choisi d'utiliser la fonction GetLastInputInfo de la librairie User32 de l'Api de Windows, comme dans le code de PCPT


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
45
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juillet 2013

Ouii mais je compte bien essayer aussi le code que m'a proposé banana32. Et si ca marche ca me fera une connaissance de plus !!