C#怎么样把另一个应用程序域的Form窗口作为当前应用程序域中MDI窗口容器的子窗口 10
楼下的回答其实是解决了把一个窗口置于另外一个窗口中的问题。实际上我的需求不是这样子的,注意,我是在程序中先用 newAppDomain = AppDomain.CreateDomain("ExternFormApp");先创建一个程序域,然后newAppDomain.CreateInstanceFromAndUnwrap(A.exe)加载一个程序集文件,然后实例化其中的一个窗口类。我不但要把该窗口类作为MDI子窗口,实际上我还要和它有交互。 展开
简单说下原理吧:
假设A程序以及运行,需要在A中放一个容器(A本身也可以)去存放一会将要运行的B程序。
启动B程序,并获取B程序的句柄,这个需要调用Win32 API,引用如下
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(
string lpClassName,
string lpWindowName
);
3. 还是调用Win32 API,将A程序的容器设置成B容器的父对象,引用如下
[DllImport("user32.dll", EntryPoint = "SetParent")]
public static extern int SetParent(
int hWndChild,
int hWndNewParent
);
A程序中的代码:
System.Diagnostics.Process.Start("B.exe");
SetParent(FindWindow(null, "B程序的Title"), this.Handle.ToInt32());
当然了,获取B程序的句柄,办法更多,直接用processinfo最好,只需要一句代码即可:
SetParent(System.Diagnostics.Process.Start("B.exe").Handle, this.Handle.ToInt32());