知道Windows用户是否处于活动状态

在Windows中,我可以login和切换用户而不用注销。 就像我可以有多个用户login,但只有一个工作。 我怎么知道哪些用户目前正在工作。

据我所知,.NET框架并没有向托管代码提供实现这个所需的API。 你将不得不调用相当多的WINAPI函数,并在.NET端定义至少一个结构和一些枚举。

如果你愿意遵循这个道路,你可以:

  • 调用WTSEnumerateSessions() ,传递hserver参数中的hserver

  • 迭代返回的WTS_SESSION_INFO结构并找到其State成员设置了WTSActiveWTSConnected位(应该只有一个在你的情况下)的那个结构,

  • 将该结构的SessionId成员传递给WTSQuerySessionInformation() ,在WTSInfoClass参数中指定WTSUserName

  • 从返回的缓冲区读取用户名,

  • 使用WTSFreeMemory()来释放缓冲区和WTS_SESSION_INFO结构数组。

正如你所看到的,这并不是微不足道的。 祝你好运。

其实我找到了一个很好的例子,在C#中的微软( 检测Windows会话状态 )。

他们注册到系统事件“SessionSwitch”

 SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch); void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e){ ... } 

它需要在Win32中的依赖

 using Microsoft.Win32; 

我尝试过,它工作得很好,相对容易。