2010-02-11 6 views
5

मैं घटनाओं सुनना चाहते हैं मेरी खिड़की में रूपों निम्नलिखित प्रणाली विस्तृत घटनाओं के लिए .NET अनुप्रयोग:.NET WinForms - सिस्टम लॉगऑफ, उपयोगकर्ता लॉक, हाइबरनेट प्रारंभ और सिस्टम के लिए घटनाओं को कैसे सुनें?

लॉग ऑफ लॉक विंडोज हाइबरनेट प्रारंभ नींद प्रारंभ सिस्टम फिर से शुरू

इन संभव हैं?

धन्यवाद

+3

इसमें से अधिकांश SystemEvents वर्ग से आच्छादित है। –

उत्तर

4

आप WMI (विंडोज मीडिया इंस्ट्रूमेंटेशन) देखने की जरूरत है। उपर्युक्त घटनाओं के लिए आपको ईवेंट वॉचर्स बनाना होगा।

http://msdn.microsoft.com/en-us/library/ms257340%28VS.80%29.aspx

उपयोगी लिंक्स:

Get Log off event from system

कैसे एक उपयोगकर्ता logoff घटना के लिए एक WMI घटना चौकीदार बनाने के लिए?

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/0c1bded8-0cce-4260-bd28-4b4ffce0d27d

http://www.aspfree.com/c/a/VB.NET/WMI-Programming-with-Visual-BasicNET-Trapping-System-Events/1/

1

जैसा कि ऊपर का सुझाव दिया, आप जाल घटनाओं के लिए WMI का उपयोग कर सकते हैं।
मैं कुछ कोड नमूना मैं कुछ साल पहले लिखा था जोड़ रहा (आशा है कि यह अभी भी काम करेगा, क्योंकि यह .Net3.5 साथ VS2010 पर लिखा गया था)

यहां कक्षा कि सभी घटनाओं बटोरता है

Imports Microsoft.Win32 
Imports System.Windows.Forms 

Public Class PowerMessageFilter 
    Implements IMessageFilter 
    Const WM_POWERBROADCAST As Integer = &H218 
    Const PBT_APMSUSPEND As Integer = &H4 
    Const PBT_APMSTANDBY As Integer = &H5 
    Const PBT_APMRESUMESUSPEND As Integer = &H7 
    Const PBT_APMRESUMESTANDBY As Integer = &H8 

    Protected Sub reportpowerchange(ByVal reason As Integer) 
     Dim report As String = String.Empty 
     Select Case (reason) 
      Case PBT_APMSUSPEND 
       report = "system is suspending operation " 
       suspend_service() 
       Exit Select 
      Case PBT_APMSTANDBY 
       report = "system is standing by " 
       suspend_service() 
       Exit Select 
      Case PBT_APMRESUMESUSPEND 
       report = "operation resuming after suspension." 
       suspend_service() 
       Exit Select 
      Case PBT_APMRESUMESTANDBY 
       report = "operation resuming after stand by." 
       suspend_service() 
      Exit Select 
     End Select 
    End Sub 

    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage 
     If WM_POWERBROADCAST = m.Msg Then 
      Console.Out.WriteLine("Power Broadcast recieved.") 
      Dim reason As Integer = m.WParam.ToInt32() 
      reportpowerchange(reason) 
     End If 
     Return False 
    End Function 

    Private Sub suspend_service() 
     ' Your suspend code 
    End Sub 
End Class 

अब, श्रोता के लिए, मैं एक Win32 सेवा है कि पृष्ठभूमि में भाग गया था और सुनने के काम

Dim Filter As New PowerMessageFilter 'The Standby/Hibernation Filter catch; 
Application.AddMessageFilter(Filter) 

मुझे खेद है कि मैं साइटों मैं से उदाहरण लिया है के लिए कोई संदर्भ नहीं है किया था, मुझे लगता है कि यह शायद एमएस से था उपरोक्त डीएन लिंक।

आशा है कि यह मदद कर सकते हैं,
Liron

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