如何在Windows窗体中打开进程
本文关键字:进程 窗体 Windows | 更新日期: 2023-09-27 18:33:17
我想在我的Windows表单应用程序中打开进程。
例如,我希望当用户按下其中一个窗口表单容器中的按钮时,mstsc.exe 将打开。
如果他按下按钮,它将在另一个容器上打开IE,
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private void button1_Click(object sender, EventArgs e)
{
Process p = Process.Start("mstsc.exe", @"c:'VPN4.rdp");
Thread.Sleep(3000);
p.StartInfo.CreateNoWindow = true; // new
SetParent(p.MainWindowHandle, this.panel1.Handle);
p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; //new
}
它打开进程,但不在窗口窗体中打开,,,
您可以启动另一个进程,并将其窗口放在您自己的窗口内。
尝试使用窗体句柄而不是面板。这是一个简短的例子
private void toolStripButton1_Click(object sender, EventArgs e)
{
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "notepad";
info.UseShellExecute = true;
var process = Process.Start(info);
Thread.Sleep(2000);
SetParent(process.MainWindowHandle, this.Handle);
}
至于原始问题的具体问题,我猜这是由于远程桌面打开了其他窗口供应用程序完成其工作,而 MainWindowHandle 不是您所追求的那个。
尝试在 Windows API 中使用 FindWindowEx 来搜索正确的窗口。如果按进程 ID 和标题进行搜索,则应找到正确的进程 ID 和标题。Stackoverflow和谷歌拥有大量的信息。只需搜索"C# FindWindowEx"
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "notepad";
info.UseShellExecute = true;
Process.Start(info);