2012-09-28 15 views
5

私は、ユーザーが5分間アイドル状態になっていて何かをしているかどうかを検出する方法を探しています。VBアイドル時間を検出する

は、これは私が試したものである(ただし、Form1がクリックされたか、何もしない/非アクティブになっている場合にのみ検出します):これはあなたのメインフォームでIMessageFilterをインタフェースを実装することによって最も簡単に行われる

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

アプリケーションの外部でキーボード/マウスの動作を検出することを目標にしていますか? –

+1

あります。アクティビティが検出されない場合は、コマンドを実行します。// code –

答えて

10

。それは、あなたが入力メッセージがディスパッチされる前にそれを嗅ぐことができます。ユーザーがマウスまたはキーボードを操作していることを確認したら、タイマーを再起動します。

メインフォームにタイマーをドロップし、インターバルプロパティをタイムアウトに設定します。あなたがそれが動作するのを見ることができるように2000年から始める。そして、このようなあなたのメインフォームの外観でコードを作る:

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 

あなたは、.NETコードで実装されていない任意のモーダルダイアログを表示する場合は、一時的にタイマーを無効にするコードを追加する必要があります。

関連する問題