在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上工作沒有什麼遠程的 –