如何在一个应用程序的多个实例上有1个notifyIcon?

时间:2012-08-24 23:23:48

标签: c# contextmenu notifyicon

我在C#应用程序中创建了一个notifyIcon,我很满意。基本上,我的应用程序是其他应用程序(记事本,Firefox等)的包装器。所以现在,当我运行我的应用程序(“MyApp firefox.exe”)时,它会加载firefox,当我将鼠标悬停在任务栏中的图标上时,它会显示“firefox.exe”...非常简单。

如果我运行我的应用程序的2个实例(使用不同的参数),我会得到2个图标,一个鼠标悬停是'firefox.exe',另一个是'notepad.exe'。

我真正想要的是有1个图标,我可以在其中创建一个ContextMenuStrip,将所有应用程序名称添加为MenuItems,因此当我右键单击时,有2个可选项目。

有没有办法在不将我的应用程序包装到另一个应用程序包装器中的情况下执行此操作?有任何想法吗?

1 个答案:

答案 0 :(得分: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消息在应用程序之间发布,所以现在你有一个通知图标 - 其他应用程序使用Windows消息向它发布消息

这确实意味着当第一个应用程序启动时,通知图标也将启动,但您可以解决此问题,通过阻止第一个应用程序关闭,如果它是第一个应用程序,持有应用程序列表,然后发布Windows消息时每一个关闭,当他们全部消失时,第一个应用程序可以关闭自己...