0

我有一项将在系统级别运行的服务。现在,我想跟踪其中的登录用户。早些时候我试图从 GetUserName api 获取登录的用户名,但在我的情况下,它每次都返回“SYSTEM”。

在我的情况下,无论如何要登录用户名吗?或者我可以安装任何挂钩,以便我可以让哪个用户登录?

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

4

3 回答 3

3

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

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

于 2009-01-14T15:15:52.060 回答
1

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

于 2009-01-14T15:00:11.110 回答
0

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

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

于 2009-01-14T15:07:58.613 回答