Как определить команду Lock This Computer из приложения WPF?

Предпочитает ответ на С#,.Net 3.5 с помощью WPF (Windows Forms также хорошо)

У меня есть приложение, которое по сути представляет собой окно панели инструментов или значок в трее. Он должен определить, блокирует ли пользователь свою рабочую станцию ​​и уходит, чтобы обновить статус человека в централизованной системе.

Я могу легко обнаружить переключатель сеанса или выход из системы, используя SystemEvents, но я не могу на всю жизнь выяснить, как обнаружить или получить событие в Lock.

Спасибо за любую помощь.

Ответ 1

Когда вы обрабатываете событие Microsoft.Win32.SystemEvents.SessionSwitch (как кажется, что вы уже делаете, чтобы обнаружить выход из системы), проверьте, Reason SessionSwitchReason .SessionLock:

 using Microsoft.Win32;
 // ...
 // Somewhere in your startup, add your event handler:
    SystemEvents.SessionSwitch += 
       new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
 // ...

 void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
 {
     switch(e.Reason)
     {
         // ...
         case SessionSwitchReason.SessionLock:
            // Do whatever you need to do for a lock
            // ...
         break;
         case SessionSwitchReason.SessionUnlock:
            // Do whatever you need to do for an unlock
            // ...
         break;
         // ...
     }
 }

Ответ 2

Вам нужно p/invoke WTSRegisterSessionNotification. Пример кода здесь