最大化系统托盘中的应用程序?

我写了一个小的WPF应用程序,当’关闭’时最小化到系统托盘(客户要求)。 双击弹出它,或右键单击提供上下文菜单退出。

但是如果应用程序被最小化,并且用户导航到开始 – >所有程序 – >应用程序,它将启动一个新实例。

如果用户执行此操作而不是启动新实例,我需要做什么(在C#中)才能使应用程序最大化正在运行的实例?

谢谢!

Jon Skeet的回答讨论了使用互斥体来做到这一点

Mutex是要走的路。 它比使用进程名称等要脆弱得多。

但是,您需要确保Mutex不是垃圾回收。 在服务(事件驱动而不是“主”方法运行完成)的情况下,最明智的方法是将它放在一个静态变量中。

在服务停止时处理互斥锁,因此您无需等待最终确定或类似的事情。

马修布林德利在同一个问题中给出了他的答案

[STAThread] static void Main() { using(Mutex mutex = new Mutex(false, "Global\\" + appGuid)) { if(!mutex.WaitOne(0, false)) { MessageBox.Show("Instance already running"); return; } Application.Run(new Form1()); } } 

为了最大化其他应用程序,您需要将消息发送到最大化。 请参阅有关邮件发送的文章

Interesting Posts