2011-10-05 23 views
0

我有一個WPF可執行文件,我希望另一個程序啓動它並將此啓動程序設置爲我的WPF可執行文件的父窗口(主要目的是當啓動程序關閉時,WPF可執行文件也會關閉)。我想我可以這樣做:我將Hwnd作爲一個命令行參數(如integer-string)傳遞,並且我可以調用SetParent或WPF可執行代碼內的任何函數來指定父級。但是,我無法讓它工作。任何人都可以告訴我該怎麼做,或者其他任何方式來做到這一點?謝謝!啓動WPF可執行文件並設置父級?

回答

2

你不能。窗口句柄是每個進程。

此外,你不想。在另一個線程中有一個父窗口 - 這會導致兩個線程的消息隊列被連接,即它們有效地共享相同的消息隊列。所以現在如果或者線程鎖定,或者做了一些冗長的處理,兩個線程都被凍結。 (就我所知,沒有辦法稍後分離消息隊列。)想象一下,試圖擴展這個跨進程。

如果您必須啓動一些新代碼並使用現有窗口作爲父項,則無法進行跨進程。您必須將WPF代碼加載到您的流程中,並調用其中的方法,將父窗口作爲參數傳遞。將代碼加載到進程中的最簡單方法是將您的WPF應用程序更改爲類庫(.dll),並添加對該.dll的引用,或使用反射動態加載它。

+0

謝謝你的回覆。儘管我對互操作性的經驗不多,但我明白你的觀點。但我想問一個更技術性的問題:如果我將.exe更改爲.dll(所以現在它在同一個線程中),我可以如何設置父級?我嘗試使用Declare Function來使用Windows API的Findwindow和SetParent函數,但仍不知道如何獲取可執行窗口的Hwnd。謝謝! – tete

+0

設置Window.Owner屬性。 http://msdn.microsoft.com/en-us/library/system.windows.window.owner.aspx –

0

正如@Joe說白了,你不能做到這一點通俗易懂...我想我能「猜」你在....

讓你可能有一個WinForm MDI父(其EXE的話)和您想要啓動另一個WPF窗口(另一個exe)作爲其子。我對麼?

Hmmmm,那麼你就必須創建一個新的WinForm子窗口,在它WinFormWPFHostApp,然後參考WPF的組件,以這個項目,並嘗試從其他WPF應用程序託管MainWindowContent

參考this文章...

+0

謝謝你的回覆。我想我們的情況更加複雜:我們在MS Access中有一個傳統的SW wirtten。我們希望切換到.Net,但這一定很長。所以現在我們想用.Net來實現一些新的需求,但顯然必須將它與我們傳統的MS Access軟件整合在一起。所以,我的問題來了。 – tete

相關問題