2012-09-28 92 views
5

Estoy buscando una manera de detectar si el usuario ha estado inactivo durante 5 minutos y luego hacer algo, y si y cuando regrese eso se detendrá, por ejemplo, un temporizador.VB Detecta el tiempo de inactividad

Esto es lo que he intentado (pero esto sólo detectará si formulario1 ha estado inactivo/no hecho clic o cualquier cosa):

Public Class Form1 

Private Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    'You should have already set the interval in the designer... 
    Timer1.Start() 
End Sub 

Private Sub form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress 
    Timer1.Stop() 
    Timer1.Start() 
End Sub 


Private Sub form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove 
    Timer1.Stop() 
    Timer1.Start() 
End Sub 

Private Sub form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick 
    Timer1.Stop() 
    Timer1.Start() 
End Sub 

Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    MsgBox("Been idle for to long") 'I just have the program exiting, though you could have it do whatever you want. 
End Sub 

End Class 
+2

¿Su objetivo es detectar la actividad del teclado/mouse fuera de su aplicación? –

+1

Sí, un poco y si no se detecta actividad, ejecute un comando // código –

Respuesta

10

Esto se hace más fácil mediante la implementación de la interfaz IMessageFilter en su forma principal. Le permite oler los mensajes de entrada antes de enviarlos. Reinicie un temporizador cuando vea al usuario operar el mouse o el teclado.

Coloque un temporizador en el formulario principal y establezca la propiedad Intervalo en el tiempo de espera. Comience con 2000 para que pueda verlo funcionar. A continuación, hacer que el código en su aspecto principal forma así:

Public Class Form1 
    Implements IMessageFilter 

    Public Sub New() 
     InitializeComponent() 
     Application.AddMessageFilter(Me) 
     Timer1.Enabled = True 
    End Sub 

    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage 
     '' Retrigger timer on keyboard and mouse messages 
     If (m.Msg >= &H100 And m.Msg <= &H109) Or (m.Msg >= &H200 And m.Msg <= &H20E) Then 
      Timer1.Stop() 
      Timer1.Start() 
     End If 
    End Function 

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
     Timer1.Stop() 
     MessageBox.Show("Time is up!") 
    End Sub 
End Class 

Puede que tenga que añadir el código que desactiva temporalmente el temporizador si muestra ningún cuadro de diálogo modal que no se implementan en el código .NET.

Cuestiones relacionadas