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

时间:2012-03-07 12:30:47

标签: c# winforms

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

1 个答案:

答案 0 :(得分:1)

好的,当您双击快捷方式时,实际上会打开另一个应用程序实例,该应用程序不知道已经最小化到托盘的那个实例。

基本上,您希望检测应用程序的另一个实例是否在启动时运行。如果是,请告诉您应用的现有实例向用户显示其UI,然后退出。

您的解决方案包含两件事:

  1. 您的应用能够理解其中的另一个实例已在运行。
  2. 您的应用能够与其他实例“交谈”(进程间通信)并告诉他们该做什么。
  3. <强> 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方法的问题的链接,以帮助您:What is the best choice for .NET inter-process communication?