21

更喜欢使用 WPF 的 C#、.Net 3.5 中的答案(Windows 窗体也可以)

我有一个应用程序,它本质上是一个工具栏窗口或托盘图标。它需要检测用户是否锁定了他/她的工作站并离开,以便在集中式系统中更新此人的状态。

使用 SystemEvents,我可以很容易地检测到会话切换或注销,但我终生无法弄清楚如何检测或接收 Lock 事件。

感谢您的任何帮助。

4

3 回答 3

45

当您处理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;
         // ...
     }
 }
于 2009-03-16T23:44:30.070 回答
2

您需要P/Invoke WTSRegisterSessionNotification

于 2009-03-16T23:42:47.407 回答
1

这是来自 CodeProject 的内容。

http://www.codeproject.com/KB/vb/DetectWindowslockunlock.aspx

于 2009-03-16T23:43:25.190 回答