隐藏窗口时如何获取Process.MainWindowHandle

时间:2011-02-18 01:49:12

标签: c# wpf

我有一个WPF应用程序。当它启动时,我需要检查是否已经有一个实例在运行。如果是这种情况,那么我使用PInvoke“显示”正在运行的实例:

SendNotifyMessage(proc.MainWindowHandle, ShowYourself, IntPtr.Zero, IntPtr.Zero);

其中proc是正在运行的另一个实例

问题是,proc隐藏在系统托盘中。 MainWindowHandle为0.我做了很多搜索,但没有运气来获得MainWindowHandle

有谁知道怎么做?

由于

1 个答案:

答案 0 :(得分:0)

使用跨进程处理程序的最佳方式,如互斥锁。 Here就是一个很好的例子。 还有一件事,如果你想从另一个实例打开隐藏的应用程序,你应该在两个应用程序之间进行客户端 - 服务器通信。已经运行的应用程序应该是服务器,并且应该监听命令以使其可见。这很简单,但需要花费大量时间来理解。

更新: Here我提交了一个允许您控制应用程序实例的简单库。这很简单,但我留下了一些评论

ApplicationSingleInstance - 它是控制应用程序实例的主类 当应用程序启动时检查属性IsInstanceAlreadyRun,如果它是真的调用StartServer()方法,如果false则调用NotifyAboutNewInstance()方法。您还应该订阅NewApplicationInstanceLoaded事件以了解是否已启动新的应用程序实例。不要忘记取消订阅事件并处理ApplicationSingleInstance的实例

更新: 我在codeproject

上发布了这个lib和解释