1

在 Windows 中,我可以在不注销的情况下登录和切换用户。像这样我可以让多个用户登录但只有一个工作。我如何知道哪些用户当前正在工作。

4

2 回答 2

2

实际上,我在 c# 中找到了一个非常好的 microsoft 示例(检测 Windows 会话状态)。

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

SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);

void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e){
...
}

它需要 Win32 中的依赖项

using Microsoft.Win32;

我试过了,效果很好,而且相对容易。

于 2013-02-07T09:59:29.443 回答
1

据我所知,.NET 框架不会向托管代码公开实现此目的所需的 API。您将不得不 p/invoke 相当多的 WINAPI 函数并在 .NET 端定义至少一个结构和一些枚举。

如果你愿意走这条路,你可以:

  • 调用WTSEnumerateSessions(),传入参数WTS_CURRENT_SERVER_HANDLEhServer

  • 遍历返回的WTS_SESSION_INFO结构并找到其State成员设置了WTSActiveandWTSConnected位的结构(在您的情况下应该只有一个),

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

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

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

如您所见,这并非微不足道。祝你好运。

于 2013-02-06T14:03:08.963 回答