2

システム トレイ アイコンに定期的に通知バルーンを作成する非 MFC、非 ATL C++ アプリがあります。Vista より前のボックスで、ユーザーが画面をロックすると、これらの新しく作成された「バルーンがキューに入れられ」、ユーザーが最終的に再ログインしたときに混乱が生じます。数十または数百のバルーンが待機している可能性があります。各バルーンに設定されたタイムアウトは、ユーザーが再度ログインするまで適用されません!!

したがって、これを解決するには、次のいずれかを知る必要があります。

  1. 新しいバルーンが到着したときに、作成した未処理のバルーンをキャンセルする方法はありますか?
  2. 代わりに「セッション ロック」/「スクリーン ロック」を確認し、ユーザーが不在の場合はバルーンの作成を停止する必要がありますか?

オプション #2 に関して、アカウント ロック/セッション ロックを取得するために Windows ループでリッスンするメッセージは何ですか? イベント WM_ENDSESSION を試しましたが、アプリはそれを認識していないように動作しました。それは正しいイベントですか?登録する必要がありますか?

もちろん、これを解決する簡単な方法があれば、知りたいです。確かに、Vista 以降では、NIF_REALTIME uFlagsオプションが問題を手軽に解決します。

ps 説明付きの Windows メッセージのリストがオンラインで見つからないことに愕然としています。私が見つけたのは説明のないリストだけで、Microsoft によってホストされていません!!!

4

1 に答える 1

0

オプション (2) に関しては、関数WTSRegisterSessionNotificationを使用して、「SessionNotifications」に関心を登録する必要があります。

WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);

ウィンドウにハンドルを渡してメッセージWM_WTSSESSION_CHANGEを受け取り、フラグ NOTIFY_FOR_THIS_SESSION を使用します。これは、セッション イベントが発生したときにメッセージを取得することを示します。

関心のあるセッション イベントは、WTS_SESSION_LOCK と WTS_SESSION_UNLOCK です。対応する登録解除関数WTSUnRegisterSessionNotificationを使用する必要があることに注意してください。

WTSUnRegisterSessionNotification(HWND hWnd);

セッションのロック/ロック解除/接続/切断状態を追跡する必要があります。これにより、いつバルーン メッセージをスケジュールするかを決定できます。

于 2011-03-04T22:26:55.153 に答える