2014-04-08 268 views
0

這是一種古怪的,雖然不完全,但我在想如果有一種方法來創建一個窗口,可以包含自定義應用程序(即* .exe)。例如有一個主窗口,並在一個選項卡中包含Application1,在另一個選項卡中包含Application2。不知道該怎麼標記這個,所以只是拋出一些可能有用的標籤。有沒有辦法讓窗口在Windows中包含自定義應用程序?

+0

什麼是「自定義應用程序」? –

+0

@DavidHeffernan任何* .exe應用程序 – dchhetri

回答

0

可以使用WinForms MDI主機在窗口內運行窗口。但是,要運行一個通用的.exe文件,沒有您期望它符合的特定標準,將是困難的或不可能的。

0

,如果你使用Visual Studio工具箱上

點擊

右鍵單擊 「選擇項目...」

等待時間

browse to your exe 


pick the controls 

注意一個愚蠢的量你的代碼仍然需要能夠在運行時解析控件,這意味着部署.NET程序集,或者用於ActiveX部署互操作程序集並且具有t他COM DLL註冊。

要在正在運行的表單應用程序中託管一個單獨的exe文件並不容易;你必須產生exe(Process.Start),然後使用win32調用來獲得合適的窗口句柄,並將窗口重新設爲你自己的窗口。這是一個合理的工作量,非常容易出錯,而且非常脆弱(如果你把它賣掉,就會發生不好的事情)。個人:我根本不會。

+0

子類化是錯誤的術語。重新裝修就是你的意思。 –

3

可以這樣做。您可以調用Win32函數SetParent來使應用程序的主窗口成爲其中一個窗口的子窗口。

但是,試圖做到這一點很少結束。總是另一個應用程序不期望你這樣做,並與它不兼容。這樣做會對這些進程的輸入隊列造成嚴重的限制。

雷蒙陳博客中提到這一點:Is it legal to call have a cross-process parent/child or owner/owned window relationship?

從技術上法律有一個父/子或所有者來自不同進程的窗口之間/資關係?

是的,這在技術上是合法的。

從技術角度來看,雜耍鏈鋸也是合法的。

創建跨線程父/子或擁有者/擁有的窗口關係隱式地附加這些窗口所屬的線程的輸入隊列,並且此附件是傳遞的:如果其中一個隊列連接到第三個隊列,那麼所有三個隊列都相互連接。更一般地說,由父/子鏈或擁有者/擁有或共享線程關係鏈相關的所有窗口的隊列彼此相連。

當父/子或所有者/所有者關係跨越流程時,這變得更加複雜,因爲跨進程協調比跨線程協調更困難。在一個流程中共享變量要比跨流程共享變量容易得多。最重要的是,一些窗口消息在進程之間被阻塞。

所以是的,這在技術上是合法的,但是如果你創建了一個跨進程的父/子或所有者/所有者關係,後果可能很難管理。如果其中一個或兩個窗口都不知道它正在參與跨進程窗口樹,它們幾乎不可能管理。 (我經常在某人想要抓住屬於另一個進程的窗口的背景下看到這個問題,並強制將它移植到他們自己的進程中,而另一個進程完全沒有準備好以這種方式操縱窗口,並且事情可能會停止工作。事實上,如果將其他窗口從頂層窗口更改爲子窗口,事情肯定會停止工作。)

甚至允許您執行此操作是向代碼寫入16位Windows。它在現代Windows中確實沒有位置。

+0

你在說什麼先生...這不是問題... – HackerMan

+0

如果這不是問題,那你的最後一段是在說什麼? –

+0

它討論將.exe文件添加到你的winform中......就像將windows media player添加到你的winform中一樣(在winform中託管一個exe文件) – HackerMan

相關問題