怎样让另外一个程序,运行在本程序的PANEL里面呢? 我找了一段代码,但是没有达到效果:
[DllImport("user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd); private const int WM_SYSCOMMAND = 0x112;
private const int SC_MAXIMIZE = 0xF030;
private const int SC_MINIMIZE = 0xF020;
private const int SC_RESTORE = 0xF120;
public const int SW_HIDE = 0;
public const int SW_SHOW = 5; [DllImport("user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShowWindow(int hwnd, int nCmdShow); private void button1_Click(object sender, EventArgs e)
{
ShellExecute(this.panel1.Handle.ToInt32(), "open", @"D:\MY Program\CtrlDemo\CtrlDemo\bin\Debug\CtrlDemo.exe", null, ".", SW_HIDE); // 让CtrlDemo.exe运行在PANEL里面
IntPtr h = FindWindow(null, "c:\\windows\\system32\\cmd.exe ");
SetParent(h, this.panel1.Handle); //嵌套到panel1内
SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
ShowWindow(h.ToInt32(), SW_SHOW);
}点击按钮后,PANEL里面没有任何东西,只在进程里面多了一个ctrldemo.exe但是也看不到窗体。请有人可以帮忙试一下吗?
[DllImport("user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd); private const int WM_SYSCOMMAND = 0x112;
private const int SC_MAXIMIZE = 0xF030;
private const int SC_MINIMIZE = 0xF020;
private const int SC_RESTORE = 0xF120;
public const int SW_HIDE = 0;
public const int SW_SHOW = 5; [DllImport("user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShowWindow(int hwnd, int nCmdShow); private void button1_Click(object sender, EventArgs e)
{
ShellExecute(this.panel1.Handle.ToInt32(), "open", @"D:\MY Program\CtrlDemo\CtrlDemo\bin\Debug\CtrlDemo.exe", null, ".", SW_HIDE); // 让CtrlDemo.exe运行在PANEL里面
IntPtr h = FindWindow(null, "c:\\windows\\system32\\cmd.exe ");
SetParent(h, this.panel1.Handle); //嵌套到panel1内
SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
ShowWindow(h.ToInt32(), SW_SHOW);
}点击按钮后,PANEL里面没有任何东西,只在进程里面多了一个ctrldemo.exe但是也看不到窗体。请有人可以帮忙试一下吗?
[DllImport("user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
private const int WM_SYSCOMMAND = 0x112;
private const int SC_MAXIMIZE = 0xF030;
private const int SC_MINIMIZE = 0xF020;
private const int SC_RESTORE = 0xF120;
public const int SW_HIDE = 0;
public const int SW_SHOW = 5;
[DllImport("user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShowWindow(int hwnd, int nCmdShow);
private void button1_Click(object sender, EventArgs e)
{
ShellExecute(this.panel1.Handle.ToInt32(), "open", @"D:\MY Program\CtrlDemo\CtrlDemo\bin\Debug\CtrlDemo.exe", null, ".", SW_HIDE); // 让CtrlDemo.exe运行在PANEL里面
IntPtr h = FindWindow(null, "c:\\windows\\system32\\cmd.exe ");
//关键在这里
Form frm = Form.FromHandle(h);
//使你的Form可以嵌入别的容器
frm.TopLevel = false;
SetParent(h, this.panel1.Handle); //嵌套到panel1内
SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
ShowWindow(h.ToInt32(), SW_SHOW);
}
Form frm = Form.FromHandle(h);
报错
Error 4 Cannot implicitly convert type 'System.Windows.Forms.Control' to 'System.Windows.Forms.Form'. An explicit conversion exists (are you missing a cast?) C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication2\WindowsFormsApplication2\Form6.cs 40 24 WindowsFormsApplication2
这个程序不是100%好用,很多时候,IE都不能在PENAL里面运行
也不行.......另外:3楼的代码也报错: //关键在这里
Form frm = Form.FromHandle(h);
无法将类型“System.Windows.Forms.Control”隐式转换为“System.Windows.Forms.Form”。存在一个显式转换(是否缺少强制转换?)
有的程序可以 我试了一下 我的那个exe 就不行 不过Uedit32。exe
可以
我也这样弄过.但确实不行...进程里面倒是有..我还试过QQ.之类的很多程序都不行...http://www.codeproject.com/KB/miscctrl/AppControl.aspx 这是有时候可以.但大多数时候都不行.
怎么有两个exe