2010-02-11 11 views

risposta

4

Hai bisogno di guardare WMI (Windows Media strumentazione). Dovresti creare osservatori di eventi per gli eventi sopra citati.

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

Link utili:

Get Log off event from system

Come creare un evento Watcher WMI per un evento utente disconnessione?

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

Come suggerito in precedenza, è possibile utilizzare il WMI per eventi trappola.
Sto aggiungendo qualche esempio di codice che ho scritto qualche anno fa (spero che continuerà a funzionare da quando è stato scritto su VS2010 Con .Net3.5)

Ecco una classe che raccoglie tutti gli eventi

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 

Ora, per l'ascoltatore, ho avuto un servizio Win32 che correva in background e fatto il lavoro di ascolto

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

mi dispiace che non ho alcun riferimento per i siti che ho preso gli esempi da, Immagino che fosse probabilmente dalla MS Link DN sopra.

spero che possa aiutare,
Liron

Problemi correlati