在Windows中,我可以登录并切换用户而不用注销。就像那样,我可以让多个用户登录,但只有一个可以工作。我如何知道哪些用户目前正在工作。知道Windows用户是否活动
1
A
回答
1
据我所知,.NET框架并未向托管代码公开需要实现此目的的API。您将不得不调用相当多的WINAPI函数,并在.NET端定义至少一个结构和一些枚举。
如果你愿意走这条道路,你可以:
呼叫WTSEnumerateSessions(),在
hServer
参数传递WTS_CURRENT_SERVER_HANDLE
,遍历返回WTS_SESSION_INFO结构和定位其在一个
State
成员有WTSActive
和WTSConnected
位设置(应该只有一个在你的情况下),该结构的
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;
我试着和它的工作非常好,也比较容易。
相关问题
- 1. 是否可以从Windows服务中知道最近一次用户活动?
- 2. Android如何知道用户是否处于不活动状态
- 3. c#:如何知道'用户帐户'是否存在于Windows?
- 4. 如何知道UserControl是否活动,而不是使用IsFocused
- 5. 如何知道您的应用的特定活动对用户是否可见?
- 6. 如何知道点击通知后是否打开了活动?
- 7. 如何知道用户是否在线?
- 8. 如何知道用户是否闲置?
- 9. 如何知道用户是否在Kivy中滚动或滚动?
- 10. 是否有可能知道活动是如何开始的?
- 11. 如何知道客户是否还活着
- 12. 知道用户是否启动了应用程序
- 13. 活动如何知道R是什么?
- 14. 如何知道当前活动之后意图是否来自2个活动?
- 15. 如何知道用户是否滚动屏幕末端
- 16. 如何知道用户是否滚动datagridview
- 17. 如何知道Android TalkBack是否处于活动状态?
- 18. Android:如何知道活动是否完成?
- 19. 如何知道是否有活动的线程?
- 20. 如何知道列表视图是否处于活动状态?
- 21. 如何知道一项活动是否已经开始
- 22. 如何知道活动结果集是否被完全提取?
- 23. 如何知道我的活动是否由Android打开?
- 24. 正确的方法来知道活动是否已被销毁
- 25. 如何知道我的活动在来电后是否恢复
- 26. 如何知道当前活动实例是否存在?
- 27. 如何知道活动是否位于堆栈顶部
- 28. 知道活动计时器
- 29. 如何知道进程是否是应用程序 - Windows
- 30. 我如何知道用户是否允许推送通知
这是一个正常的应用程序,或者你作为服务运行? – egrunin
在控制台会话中只能有一个用户活动,但有几个用户可以同时通过终端服务工作。这些会议是否应该被忽略? –
@FrédéricHamidi是的,这些圣训被忽略。通常我只会有人在同一个物理PC上工作没有什么远程的 –