在Windows中,我可以login和切换用户而不用注销。 就像我可以有多个用户login,但只有一个工作。 我怎么知道哪些用户目前正在工作。
据我所知,.NET框架并没有向托管代码提供实现这个所需的API。 你将不得不调用相当多的WINAPI函数,并在.NET端定义至少一个结构和一些枚举。
如果你愿意遵循这个道路,你可以:
调用WTSEnumerateSessions() ,传递hserver
参数中的hserver
,
迭代返回的WTS_SESSION_INFO结构并找到其State
成员设置了WTSActive
和WTSConnected
位(应该只有一个在你的情况下)的那个结构,
将该结构的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;
我尝试过,它工作得很好,相对容易。