2012-03-15 155 views
2

我需要創建一個Windows服務,用於檢查用戶何時登錄Windows(在具有多個用戶的計算機上)以及何時用戶登出(或鎖定計算機)和用這些信息計算用戶登錄的時間(我不在乎空閒時間),或者如果我能直接得到最後一塊,這個信息會更好。 (我不介意用戶拉線,服務將輪詢當前用戶並記錄這些信息,以便我知道下次喚醒時計算機是否被關閉。它不必是精確)。如何檢查當前登錄的用戶和登錄時間

我需要知道這一點,以便在用戶超出特定時間限制時將其踢出。

我將使用C#或德爾福,我希望指出我要找哪些API來獲取此信息。

周圍已經有軟件檢查這個目標是爲了檢查孩子的電腦使用情況,我需要類似的東西,但我會定製另一個目的,而不是看孩子。

其實,我可能只需要知道用戶何時登錄,並從中我會自己計算其餘的。

+0

你還需要接受解釋權力和絃的人。 – 2012-03-15 16:28:08

+1

開啓審覈成功登錄。然後只需讓您的服務觀看相應事件的事件日誌。 – JamieSee 2012-03-15 16:31:23

回答

2

該信息的來源來自SECURITY_LOGON_SESSION_DATA。您可以使用LsaGetLogonSessionDataLsaEnumerateLogonSessions。要獲得線程的會話ID(或用戶登錄標記),可以使用GetTokenInformationTokenSessionId作爲參數。

the old answer你會發現小演示的源代碼。

如果您需要顯示器用戶登錄和註銷,我會建議你實現ISensLogon2回調接口(見System Event Notification Service (SENS))的在你的windows服務。如果你打算在C#中使用它,我會建議你the article

+0

謝謝你,非常有用的文章。 – 2012-06-01 23:01:47

+0

@CraigStevenson:不客氣! – Oleg 2012-06-01 23:02:58

0

您需要查詢Windows事件日誌以獲取此信息。 Eric Fitzgerald談到了here。還要注意他鏈接到here,關於如何依賴「LogOff」事件是不可靠的。這提到了我上面的評論,關於人們拔出力量和絃。

的文章還提到涉及的特質,如工作站鎖定,等...