C# 在Windows 10的Windows窗体中运行程序

C# 在Windows 10的Windows窗体中运行程序,c#,.net,C#,.net,对于早期的Windows操作系统,这个问题已经在堆栈溢出问题上得到了多次解答,这里甚至有一个视频指南: 但是,当我在简单的windows窗体内实现启动calc.exe的代码时,calc将在窗体外启动。我创建了一个表单,并使用以下代码添加了一个单击处理程序: [DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); MessageBox.Show(Da

对于早期的Windows操作系统,这个问题已经在堆栈溢出问题上得到了多次解答,这里甚至有一个视频指南:

但是,当我在简单的windows窗体内实现启动calc.exe的代码时,calc将在窗体外启动。我创建了一个表单,并使用以下代码添加了一个单击处理程序:

[DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
MessageBox.Show(DateTime.Now.ToLongTimeString());
Process p= Process.Start("calc.exe");
Thread.Sleep(1000);
MessageBox.Show("Process exited at: " + p.ExitTime.ToLongTimeString());
在单击处理程序中:

Process p = Process.Start("calc.exe");
p.WaitForInputIdle();
SetParent(p.MainWindowHandle, this.Handle);
如果我添加此代码:

[DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
MessageBox.Show(DateTime.Now.ToLongTimeString());
Process p= Process.Start("calc.exe");
Thread.Sleep(1000);
MessageBox.Show("Process exited at: " + p.ExitTime.ToLongTimeString());

它将在我启动后大约1秒显示时间。所以我猜我开始的过程是某种中介,它最终启动Calc.exe并退出。这显然是windows的新行为,因为此代码用于工作。有人知道如何获得最终进程,即实际的Calc.exe吗?

Calc.exe
在windows 10上不再是一个应用程序,而是一个启动现代应用程序的外壳。请尝试使用notepad.exe而不是Calc.exe多亏了你们两位。使用记事本工作正常。