2011-02-18 61 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