挂钩窗口login/注销事件

我有一个服务将在系统级运行。 现在,我想跟踪login的用户。 之前我试图从GetUserName api获取login的用户名,但在我的情况下,它每次都返回“SYSTEM”。

无论如何,在我的情况下login用户名? 还是有任何钩子,我可以安装,以便我可以得到哪个用户login?

PS:我主要在Delphi 2007中工作,但这些问题都是针对Win32 API的。

Solutions Collecting From Web of "挂钩窗口login/注销事件"

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

您可以使用此信息以及终端服务API来确定谁做了什么。

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

你需要更具体的你的要求。 可能有多个用户在任何时间登录,无论是本地或远程。 你只关心交互式用户吗?

最常见的要求是如何获得本地登录的交互式用户,即身体坐在键盘和屏幕上的人。 在决定如何进行之前,您必须考虑各种问题。 MSDN在Window Stations上有一个很好的入口,可以比我更好地解释情况。