Delphi和Windows登录事件



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

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

由于用户会话是基于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需要有一个接收通知的窗口。在服务中,您需要创建一个带有消息循环(另一个主题)的隐藏服务

最新更新