如题
在http://www.codeproject.com/cs/miscctrl/AppControl.asp提供部分解决方案,但它提供的代码在目前测试条件下只能实现.net、vb开发exe程序嵌入.net窗体的某个容器控件中,由于项目需求需要,delphi开发的程序也在此列,但其开发程序不能嵌入容器控件中,查看http://www.codeproject.com/cs/miscctrl/AppControl.asp?df=100&forumid=137160&select=1047633#xx1047633xx及其跟帖,怀疑通过System.Diagnostics.Process.Start取得的hWnd有误,导致WinAPI函数SetParent不能达到要求,请各位帮助解决一下,再次先表示感谢!
在http://www.codeproject.com/cs/miscctrl/AppControl.asp提供部分解决方案,但它提供的代码在目前测试条件下只能实现.net、vb开发exe程序嵌入.net窗体的某个容器控件中,由于项目需求需要,delphi开发的程序也在此列,但其开发程序不能嵌入容器控件中,查看http://www.codeproject.com/cs/miscctrl/AppControl.asp?df=100&forumid=137160&select=1047633#xx1047633xx及其跟帖,怀疑通过System.Diagnostics.Process.Start取得的hWnd有误,导致WinAPI函数SetParent不能达到要求,请各位帮助解决一下,再次先表示感谢!
通过System.Diagnostics.Process得到的估计是Application的句柄
可能把delphi的Application程序,变化成其它类型,如dll,activeform,等
using System.Runtime.InteropServices;[DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWnd, IntPtr hWndParent);[DllImport("user32.dll")]
public static extern IntPtr GetWindow(IntPtr hWnd, int uCmd);public const int GW_OWNER = 4;
public const int GW_CHILD = 5;public delegate bool WNDENUMPROC(IntPtr hwnd, int lParam);[DllImport("user32.dll")]
public static extern int EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);private IntPtr vMainFormHandle;
public bool EnumFunc(IntPtr hwnd, int lParam)
{
if (GetWindow(hwnd, GW_OWNER) == (IntPtr)lParam)
{
vMainFormHandle = hwnd;
return false;
}
return true;
}private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process vProcess = System.Diagnostics.Process.Start(
@"Project1.exe");
while (vProcess.MainWindowHandle == IntPtr.Zero) vProcess.Refresh();
vMainFormHandle = IntPtr.Zero;
EnumWindows(EnumFunc, (int)vProcess.MainWindowHandle);
SetParent(vMainFormHandle, Handle);
}