un écran d'éveil
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
GetLastInputInfo de la librairie User32 de l'Api de Windows
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionDans 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.