2

我想知道如何在 delphi windows 服务中接收 windows 登录和注销事件。服务本身已经构建,现在我想显示一个打开设置/日志窗口的系统托盘图标。要显示该图标,我需要知道用户是否已登录...

我已经看到了一些关于 c# 的“系统事件通知服务”的信息,但是关于 delphi 的信息很少。

4

1 回答 1

4

由于用户会话基于 RDS(远程桌面服务- 前终端服务)技术,您可以尝试WTSRegisterSessionNotification / WTSRegisterSessionNotificationEx API。他们为您提供有关各种事件的信息,例如:

  • WTS_SESSION_LOGON
  • WTS_SESSION_LOGOFF
  • WTS_REMOTE_CONNECT
  • WTS_REMOTE_DISCONNECT
  • WTS_CONSOLE_CONNECT
  • WTS_CONSOLE_DISCONNECT 等

根据事件,您可以找到用户的会话 ID。然后你可以在这个特定的会话中启动一个进程(即注入一个程序到一个特定的RDS会话)。例如,您可以在用户会话中启动一个显示您的图标的进程。该进程可以通过命名管道、内存映射文件等与您的服务进行通信。

我个人使用这些事件来在用户断开会话时停止 GUI 密集型工作(即停止更新标签、列表框、备忘录等)

** 这些 API 需要有一个接收通知的窗口。在服务中,您需要创建一个带有消息循环的隐藏服务(另一个主题)

于 2013-04-12T12:01:32.723 回答