我有一个c#提供的windows窗体应用程序,我想在其中运行一个exe文件。该程序是另一个单独的可执行文件。可以说这个exe不是一个dot net应用程序,而是用另一种语言编写的,这有什么关系吗?在windows窗体应用程序中运行一个外部exe文件
所以我想要该程序躺在我的winforms里面,我该怎么做?另外,我可以把它放在winforms的任何地方吗?有没有像默认包含的属性?谢谢。你试过做这些?如果是的话,要采取什么步骤?感谢你为开发人员提供了一个不错的开发者社区。我真的很珍惜这个
我有一个c#提供的windows窗体应用程序,我想在其中运行一个exe文件。该程序是另一个单独的可执行文件。可以说这个exe不是一个dot net应用程序,而是用另一种语言编写的,这有什么关系吗?在windows窗体应用程序中运行一个外部exe文件
所以我想要该程序躺在我的winforms里面,我该怎么做?另外,我可以把它放在winforms的任何地方吗?有没有像默认包含的属性?谢谢。你试过做这些?如果是的话,要采取什么步骤?感谢你为开发人员提供了一个不错的开发者社区。我真的很珍惜这个
为此,您可以通过PInvoking SetParent()
:
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
首先,你需要你的应用程序中启动第三方应用:
var clientApplication = Process.Start("PATH_TO_YOUR_EXECUTABLE");
然后设置它的MainWindowHandle
主窗口句柄:
SetParent(clientApplication.MainWindowHandle, YourMainWindowOrAContainerControl.Handle);
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private void button1_Click(object sender, EventArgs e)
{
try
{
Process p = Process.Start(textBox1.Text);
p.WaitForInputIdle();
SetParent(p.MainWindowHandle, panel1.Handle);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
参考fardjad,但它只能运行像记事本,Firefox,Safari浏览器的小程序
设置名称也不会伤害。 –
重复[如何在我的C#程序面板中运行另一个应用程序?](https://stackoverflow.com/questions/758494/how-can-i-run-another-application-within-a-panel-的,我-C锋利程序)? – user34660