我有一個WPF可執行文件,我希望另一個程序啓動它並將此啓動程序設置爲我的WPF可執行文件的父窗口(主要目的是當啓動程序關閉時,WPF可執行文件也會關閉)。我想我可以這樣做:我將Hwnd作爲一個命令行參數(如integer-string)傳遞,並且我可以調用SetParent或WPF可執行代碼內的任何函數來指定父級。但是,我無法讓它工作。任何人都可以告訴我該怎麼做,或者其他任何方式來做到這一點?謝謝!啓動WPF可執行文件並設置父級?
回答
你不能。窗口句柄是每個進程。
此外,你不想。在另一個線程中有一個父窗口 - 這會導致兩個線程的消息隊列被連接,即它們有效地共享相同的消息隊列。所以現在如果或者線程鎖定,或者做了一些冗長的處理,兩個線程都被凍結。 (就我所知,沒有辦法稍後分離消息隊列。)想象一下,試圖擴展這個跨進程。
如果您必須啓動一些新代碼並使用現有窗口作爲父項,則無法進行跨進程。您必須將WPF代碼加載到您的流程中,並調用其中的方法,將父窗口作爲參數傳遞。將代碼加載到進程中的最簡單方法是將您的WPF應用程序更改爲類庫(.dll),並添加對該.dll的引用,或使用反射動態加載它。
正如@Joe說白了,你不能做到這一點通俗易懂...我想我能「猜」你在....
讓你可能有一個WinForm MDI父(其EXE的話)和您想要啓動另一個WPF窗口(另一個exe)作爲其子。我對麼?
Hmmmm,那麼你就必須創建一個新的WinForm
子窗口,在它WinFormWPFHostApp
,然後參考WPF的組件,以這個項目,並嘗試從其他WPF應用程序託管MainWindow
的Content
。
參考this文章...
謝謝你的回覆。我想我們的情況更加複雜:我們在MS Access中有一個傳統的SW wirtten。我們希望切換到.Net,但這一定很長。所以現在我們想用.Net來實現一些新的需求,但顯然必須將它與我們傳統的MS Access軟件整合在一起。所以,我的問題來了。 – tete
- 1. 如何爲VC++項目設置啓動可執行文件?
- 2. 使用自定義配置文件啓動可執行文件
- 3. 如何以實時優先級啓動可執行文件?
- 4. 在升級可執行文件時移動現有配置設置
- 5. Visual Studio啓動可執行文件並自行啓動它的區別?
- 6. 啓動本地可執行文件Javascript
- 7. 鶯可執行文件無法啓動
- 8. 從網站啓動可執行文件?
- 9. 將Wpf父級設置爲MDIform
- 10. WPF啓動畫面執行
- 11. 啓動一個可執行文件並傳遞參數
- 12. Aptana 3 - 設置PHP可執行文件
- 13. 什麼可執行文件啓動了我的可執行文件?
- 14. 與DLL彈簧啓動可執行文件的可執行文件
- 15. 啓動可執行文件時出錯,未連接配置的ios設備
- 16. 啓動C在啓動時raspbian可執行文件
- 17. 主要可執行文件運行啓動程序可執行文件,然後啓動程序運行主要可執行文件
- 18. 從可執行位置啓動程序
- 19. WPF - 從樣式設置器ControlTemplate內部訪問父級控件
- 20. 在Xcode中設置活動的可執行文件
- 21. 在Xcode中設置默認的活動可執行文件
- 22. 通過Netbeans上的文件啓動任意可執行文件
- 23. 如何設置從Windows批處理文件啓動可執行文件時的進程優先級,而無需啓動終端
- 24. 在QML組件中與父級分開設置父上下文
- 25. 啓動一個可執行文件並在運行時發送信號
- 26. 春分啓動可執行
- 27. 啓動器不可執行
- 28. 在父級上執行UserControl事件
- 29. xcode:在路徑上沒有可啓動的可執行文件
- 30. 如何從命令行啓動XCode可執行文件
謝謝你的回覆。儘管我對互操作性的經驗不多,但我明白你的觀點。但我想問一個更技術性的問題:如果我將.exe更改爲.dll(所以現在它在同一個線程中),我可以如何設置父級?我嘗試使用Declare Function來使用Windows API的Findwindow和SetParent函數,但仍不知道如何獲取可執行窗口的Hwnd。謝謝! – tete
設置Window.Owner屬性。 http://msdn.microsoft.com/en-us/library/system.windows.window.owner.aspx –