2012-09-28 14 views
5

मैं यह पता लगाने का एक तरीका ढूंढ रहा हूं कि उपयोगकर्ता 5 मिनट के लिए निष्क्रिय है या नहीं, और यदि वह वापस आता है तो वह चीज़ रुक जाएगी, उदाहरण के लिए एक टाइमर।वीबी निष्क्रिय समय का पता लगाएं

यह मैं क्या कोशिश की है है (लेकिन यह केवल पहचान करेगा अगर Form1 निष्क्रिय/किया गया है क्लिक किया है या कुछ भी नहीं):

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

हां थोडा और यदि कोई गतिविधि नहीं मिली है तो एक कमांड // कोड चलाएं –

उत्तर

10

यह आपका मुख्य रूप में IMessageFilter इंटरफेस को लागू करने से सबसे आसान किया जाता है। यह आपको प्रेषित होने से पहले इनपुट संदेशों पर स्नीफ करने देता है। जब आप माउस या कीबोर्ड का संचालन करने वाले उपयोगकर्ता को देखते हैं तो टाइमर को पुनरारंभ करें।

मुख्य रूप पर एक टाइमर ड्रॉप करें और अंतराल की संपत्ति को टाइमआउट पर सेट करें। 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 कोड में लागू नहीं कर रहे हैं प्रदर्शित जोड़ने के लिए हो सकता है।

संबंधित मुद्दे