2012-03-15 182 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”事件是不可靠的。这提到了我上面的评论,关于人们拔出力量和弦。

的文章还提到涉及的特质,如工作站锁定,等...