挂钩Windows登录/注销事件

时间:2009-01-14 14:55:45

标签: c windows winapi windows-xp native

我正在运行一个在SYSTEM级别运行的服务。现在,我想跟踪其中的登录用户。之前我试图从GetUserName api获取登录用户名,但在我的情况下,它每次都返回“SYSTEM”。

我的情况下是否有登录用户名?或者是否有任何我可以安装的钩子以便我可以获得哪个用户登录?

P.S: 我主要在Delphi 2007中工作,但这些问题特定于Win32 API。

3 个答案:

答案 0 :(得分:3)

我不熟悉Delphi的Windows服务实现,但无论您在何处设置服务接受的控件,都应添加SERVICE_ACCEPT_SESSIONCHANGE。然后在您的HandlerEx回调函数中,dwEventType参数将是WM_WTSSESSION_CHANGE值之一,而lpEventData将是指向包含事件的会话ID的WTSSESSION_NOTIFICATION结构的指针。

您可以将此信息与终端服务API一起使用,以确定谁做了什么。

答案 1 :(得分:1)

您可以使用SENS收听订阅登录通知。

答案 2 :(得分:0)

您需要更具体地满足您的要求。在任何给定时间,可能有多个用户在本地或远程登录。你只关心互动用户吗?

最常见的请求是如何获得本地登录的交互式用户,即物理上坐在键盘和屏幕上的人。在决定如何继续之前,您必须考虑各种问题。 MSDN在Window Stations上有一个很好的条目,可以更好地解释这种情况。