2

Delphi Windows サービス内で Windows ログオンおよびログオフ イベントを受信する方法を知りたいです。サービス自体は既に構築されているので、設定/ログ ウィンドウを開く systray アイコンを表示したいと思います。そのアイコンを表示するには、ユーザーがログインしているかどうかを知る必要があります...

C# の「システム イベント通知サービス」に関する情報を見たことがありますが、デルファイに関する情報はほとんどありません。

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 に答える