Delphi和Windows登录事件

时间:2013-04-12 10:48:46

标签: delphi windows-services delphi-2010

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

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

1 个答案:

答案 0 :(得分:4)

由于用户会话基于RDS(Remote Desktop Services - 以前的终端服务)技术,因此您可以尝试使用WTSRegisterSessionNotification / WTSRegisterSessionNotificationEx API。 They give you information about various events喜欢:

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

根据事件,您可以找到用户的会话ID。然后,您可以在此特定会话中启动一个流程(即inject a program to a specific RDS session)。例如,您可以在用户会话中启动显示您的图标的流程。此过程可以通过命名管道,内存映射文件等与您的服务进行通信。

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

**这些API需要有一个接收通知的窗口。 In a service you need to create a hidden one with a message loop (another topic)