我正在运行一个在SYSTEM级别运行的服务。现在,我想跟踪其中的登录用户。之前我试图从GetUserName api获取登录用户名,但在我的情况下,它每次都返回“SYSTEM”。
我的情况下是否有登录用户名?或者是否有任何我可以安装的钩子以便我可以获得哪个用户登录?
P.S: 我主要在Delphi 2007中工作,但这些问题特定于Win32 API。
答案 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上有一个很好的条目,可以更好地解释这种情况。