2013-02-06 61 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; 

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

相關問題