2011-02-18 125 views
4

我有一个WPF应用程序。当它启动时,我需要检查是否有一个实例正在运行。如果是这样的话,那么我“秀”正在运行的实例使用的PInvoke:如何隐藏窗口时获取Process.MainWindowHandle

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

其中PROC是的运行

的问题是,当proc隐藏在系统托盘中的另一个实例。 MainWindowHandle是0.我做了很多搜索,但没有运气得到MainWindowHandle

任何人都知道如何?

感谢

+2

可能重复( http://stackoverflow.com/questions/19147/what-is-the-correct-way-to-create-a-single-instance-application) – 2011-02-18 03:26:00

回答

0

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

已更新: Here我已经提交了一个简单的库,允许您控制应用程序实例。这很简单,但我离开的一些意见

ApplicationSingleInstance - 它是一个用于控制应用程序实例 当应用程序启动时检查属性IsInstanceAlreadyRun,如果这是真的调用startserver的()方法,如果假的invoke NotifyAboutNewInstance()方法的主类。此外,您应该在NewApplicationInstanceLoaded事件上订阅以了解是否已启动新的应用程序实例。不要忘了从事件退订和处置ApplicationSingleInstance

实例

更新:[什么是创建一个单实例应用程序的正确方法] 我已经张贴此lib和解释上的codeproject

+0

这不是我正在寻找,但因为没有其他回答我会接受这个。 – sean717 2011-02-21 20:36:12