0

C# アプリケーションで notifyIcon を作成しましたが、満足しています。基本的に、私のアプリケーションは他のアプリケーション (メモ帳、Firefox など) のラッパーです。今、アプリ ("MyApp firefox.exe") を実行すると、Firefox が読み込まれ、タスク バーのアイコンにマウスを合わせると、"firefox.exe" と表示されます。

アプリケーションの 2 つのインスタンスを (異なるパラメーターで) 実行すると、2 つのアイコンが表示されます。

私が本当に欲しいのは、すべてのアプリケーション名を MenuItems として追加する ContextMenuStrip を作成できる 1 つのアイコンがあることです。そのため、右クリックすると、2 つの選択可能な項目があります。

私のアプリケーションをさらに別のアプリケーションラッパーでラップせずにこれを行う方法はありますか? 何か案は?

4

1 に答える 1

1

これがひどい答えならごめんなさい...

最初のアプリの起動時にアプリケーションのインスタンスを1つだけ作成するのと同じ方法で、ミューテックスを作成します...

アプリケーションの起動を妨げる代わりに、次のようにフラグを設定します

Mutex firstAppToStart = new System.Threading.Mutex(false, "Mutex...");
if (firstAppToStart.WaitOne(0, false)) {
    // set flag to allow notifyicon to be loaded
    CreateNotificationIcon();
} else {
    // The mutex is not ours, therefore we do not create a notify icon
}
// Subsequent messages will be posted to the first application to use 
// the notify icon on the first application

これで、Windowsメッセージを使用してアプリケーション間で投稿できるため、通知アイコンが1つになります。他のアプリはWindowsメッセージを使用してメッセージを投稿します。

これは、最初のアプリが実行されると、notifyiconも実行されることを意味しますが、最初のアプリが最初のアプリである場合は最初のアプリが閉じないようにし、アプリのリストを保持し、それぞれが閉じたときにWindowsメッセージを投稿することで、これを回避できます。それらがすべてなくなったら、最初のアプリはそれ自体を閉じることができます...

于 2012-08-24T23:45:42.717 に答える