0

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

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

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

有没有办法在不将我的应用程序包装在另一个应用程序包装器中的情况下做到这一点?有任何想法吗?

4

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 消息在应用程序之间发布,所以现在你有一个 notifyicon - 其他应用程序使用 windows 消息向它发布消息

这确实意味着当第一个应用程序运行时,notifyicon 也会消失,但您可以通过防止第一个应用程序关闭(如果它是第一个应用程序),保存应用程序列表,然后在每个应用程序关闭时发布一条 Windows 消息来解决此问题,当他们都走了时,第一个应用程序可以自行关闭......

于 2012-08-24T23:45:42.717 回答