我有一个WPF应用程序。当它启动时,我需要检查是否已经有一个实例在运行。如果是这种情况,那么我使用PInvoke“显示”正在运行的实例:
SendNotifyMessage(proc.MainWindowHandle, ShowYourself, IntPtr.Zero, IntPtr.Zero);
其中proc是正在运行的另一个实例
问题是,proc
隐藏在系统托盘中。 MainWindowHandle
为0.我做了很多搜索,但没有运气来获得MainWindowHandle
。
有谁知道怎么做?
由于
答案 0 :(得分:0)
使用跨进程处理程序的最佳方式,如互斥锁。 Here就是一个很好的例子。 还有一件事,如果你想从另一个实例打开隐藏的应用程序,你应该在两个应用程序之间进行客户端 - 服务器通信。已经运行的应用程序应该是服务器,并且应该监听命令以使其可见。这很简单,但需要花费大量时间来理解。
更新: Here我提交了一个允许您控制应用程序实例的简单库。这很简单,但我留下了一些评论
ApplicationSingleInstance - 它是控制应用程序实例的主类 当应用程序启动时检查属性IsInstanceAlreadyRun,如果它是真的调用StartServer()方法,如果false则调用NotifyAboutNewInstance()方法。您还应该订阅NewApplicationInstanceLoaded事件以了解是否已启动新的应用程序实例。不要忘记取消订阅事件并处理ApplicationSingleInstance的实例
更新: 我在codeproject
上发布了这个lib和解释