Как определить команду "Блокировать этот компьютер" из приложения WPF?

Предпочел бы ответ в C#, .Net 3.5 с использованием WPF (Windows Forms тоже хорошо)

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

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

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

3 ответа

Решение

Когда вы обрабатываете 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;
         // ...
     }
 }

Вам нужно P/Invoke WTSRegisterSessionNotification,

Другие вопросы по тегам