单击桌面上的快捷方式时打开系统托盘图标

本文关键字:系统托盘图标 快捷方式 桌面 单击 | 更新日期: 2023-09-27 18:27:12

我正在开发WinForms。现在我想实现一件事:当我点击桌面应用程序的快捷方式,然后应用程序处于最小化状态时,它将从系统托盘中打开(而不是创建新实例)。

单击桌面上的快捷方式时打开系统托盘图标

好的,所以当你双击快捷方式时,它实际上会打开应用程序的另一个实例,它不知道已经最小化的应用程序。

从本质上讲,你想在启动时检测到你的应用程序的另一个实例正在运行。如果是,请告诉应用程序的现有实例向用户显示其UI,然后退出。

您的解决方案由两部分组成:

  1. 您的应用程序能够了解它的另一个实例已经在运行
  2. 你的应用程序能够与它的其他实例"对话"(进程间通信),并告诉他们该做什么

1.您的应用程序能够了解它的另一个实例已经在运行
这在.NET中很简单。打开应用程序时,请使用Mutex类。这是一个系统范围的锁,本质上类似于Monitor

示例:

// At app startup:
bool createdNew;
var mutex = new Mutex(true, Application.ProductName, out createdNew);
if (!createdNew)
{
    // Use IPC to tell the other instance of the app to show it's UI
    // Return a value that signals for the app to quit
}
// At app shutdown (unless closing because we're not the first instance):
mutex.ReleaseMutex();

2.进程间通信
有几种方法可以在.NET中实现IPC。WCF是其中之一,尽管它相当繁重。命名管道可能是您的最佳选择,尽管这是一个简单的要求,基本的套接字消息也应该起作用。

这里有一个链接,链接到一个关于.NET中适当IPC方法的问题,可以帮助您:.NET进程间通信的最佳选择是什么?