.NET WinForms - Как прослушать события для системного выхода из системы, блокировки пользователя, запуска в спящем режиме и возобновления работы системы? - PullRequest
5 голосов
/ 11 февраля 2010

Я хочу прослушивать события в моем приложении Windows. Форма для следующих системных событий:

Выйти Блокировка Windows Hibernate начался Сон начался Система возобновлена ​​

Возможно ли это?

Спасибо

Ответы [ 2 ]

4 голосов
/ 11 февраля 2010

Нужно смотреть WMI (инструментарий Windows Media). Вам необходимо создать наблюдатели событий для вышеупомянутых событий.

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

Полезные ссылки:

Получение события выхода из системы

Как создать WMI Event Watcher для события выхода пользователя из системы?

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 голос
/ 19 июля 2015

Как указано выше, вы можете использовать WMI для перехвата событий.
Я добавляю пример кода, который написал несколько лет назад (надеюсь, он все еще будет работать, так как он был написан на VS2010 с .Net3.5)

Вот класс, который собирает все события

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)

Извините, что у меня нет ссылок на сайты, с которых я привел примеры, наверное, это было из ссылок MSDN выше.

Надеюсь, это поможет,
Liron

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...