.NET WinForms – Come ascoltare gli eventi per il sistema LogOff, User Locked, Hibernate Started e System ripreso?

Voglio ascoltare gli eventi nelle mie windows di Windows. Applicazione .NET per i seguenti eventi di sistema:

Disconnessione Blocca Windows Sospeso Avvio Sospeso Ripristino del sistema avviato

Sono questi possibili?

Grazie

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

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

Link utili:

Ottieni disconnessione dall’evento dal sistema

Come creare un osservatore di eventi WMI per un evento di disconnessione dell’utente?

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/

Come suggerito sopra, puoi usare WMI per intrappolare gli eventi.
Sto aggiungendo qualche esempio di codice che ho scritto qualche anno fa (spero che funzionerà ancora da quando è stato scritto su VS2010 con .Net3.5)

Ecco una lezione 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, avevo un servizio Win32 che funzionava in background e faceva il lavoro di ascolto

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

Mi dispiace di non avere riferimenti per i siti da cui ho preso gli esempi, suppongo che sia stato probabilmente dai link MSDN sopra.

Spero che possa aiutare
Liron