5

この質問に対する答えがようやく得られたので、Windowsエクスプローラーにシグナルを送信して、systrayアイコンを更新することができます.systrayアイコンを削除するように求めています。

アプリケーションが失われた場合に、システム トレイ アイコンを再表示するようにアプリケーションを「微調整」する方法はありますか?

Avira AV をインストールして以来、私の Apache Monitor でこの問題が発生しています。
確かに、それは副作用にすぎない可能性がありますが、システムトレイアイコンが正しく表示されないという理由だけで、実行中のアプリを強制終了してから再起動するのは非常に面倒です.

前もってありがとう、
ガス

4

3 に答える 3

10

タスク バー アイコンの復元は、(エクスプローラではなく) アプリケーション自体によって実装されます。RegisterWindowMessage("TaskbarCreated")必要に応じてタスク バー アイコンを復元するために、アプリケーションが応答する必要がある"TaskbarCreated" というウィンドウ メッセージ (値は で取得できます) があります。

たとえば、アプリケーションで次のことができます。

const int uTaskbarCreatedMsg = RegisterWindowMessage("TaskbarCreated");

次に、その WndProc 関数で:

LRESULT CALLBACK WndProc(HWND w, UINT msg, WPARAM wparam, LPARAM lparam)
{
    // ... handle other messages
    if (msg == uTaskbarCreatedMsg) {
        NOTIFYICONDATA nid;
        // fill in details to create icon
        Shell_NotifyIcon(NIM_ADD, &nid);
        return 0;
    }
    // ... default message handling
}

したがって、アプリケーションにタスク バー アイコンを強制的に復元させるには、同じTaskbarCreatedメッセージをアプリケーション内の適切なウィンドウに送信する必要があります。HWNDウィンドウに到達する 1 つの方法は、 を使用することですFindMessage(Apache Monitor はオープン ソースであるため、探すウィンドウを簡単に見つけることができます)。

于 2009-07-11T23:17:48.243 に答える
4

システムのすべての最上位ウィンドウに TaskbarCreated メッセージを送信するプロジェクトを作成しました。トレイ アイコンを登録している場合は、エクスプローラーがクラッシュした後にアイコンを復元する必要があります。

私はMIT ライセンスの下でソースをリリースし、readme ファイルに (Lazarus を使用して)コンパイルされたコンソール アプリケーションへのリンクを提供しました。

アイコンがすでにトレイにあることがわかっている場合はメッセージを送信しないなど、いくつかの改良を加えることができますが、今のところ、このアプリにより、エクスプローラーのクラッシュで失われたことがわかっているアイコンが再表示されます.

于 2013-03-21T18:41:55.943 に答える
-3

これは私のために働いた(Windows 7-64ビット)

  1. タスクマネージャーを起動する
  2. apachemonitorプロセスを強制終了します
  3. スタートメニューからapachemonitorを起動します

これで、システムトレイにアイコンが表示されます。

于 2012-03-03T04:54:57.257 に答える