2013-02-06 60 views
1

在Windows中,我可以登录并切换用户而不用注销。就像那样,我可以让多个用户登录,但只有一个可以工作。我如何知道哪些用户目前正在工作。知道Windows用户是否活动

+0

这是一个正常的应用程序,或者你作为服务运行? – egrunin

+0

在控制台会话中只能有一个用户活动,但有几个用户可以同时通过终端服务工作。这些会议是否应该被忽略? –

+0

@FrédéricHamidi是的,这些圣训被忽略。通常我只会有人在同一个物理PC上工作没有什么远程的 –

回答

1

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

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

  • 呼叫WTSEnumerateSessions(),在hServer参数传递WTS_CURRENT_SERVER_HANDLE

  • 遍历返回WTS_SESSION_INFO结构和定位其在一个State成员有WTSActiveWTSConnected位设置(应该只有一个在你的情况下),

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

  • 从返回的缓冲器读出的用户名,

  • 使用WTSFreeMemory()以释放缓冲器和WTS_SESSION_INFO结构的阵列。

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

+0

哇,太棒了,我会试试看,谢谢 –

2

其实我在c#中发现了一个非常好的微软示例(Detect the Windows session state)。

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

SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch); 

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

它需要依赖在Win32中

using Microsoft.Win32; 

我试着和它的工作非常好,也比较容易。

相关问题