C# 将正在运行的外部应用加载到panel窗体中,并一直保持前置激活状态
时间: 2024-02-19 08:59:22 浏览: 109
C# WInForm窗体嵌入外部EXE程序.zip
要将正在运行的外部应用加载到 Panel 窗体中并一直保持前置激活状态,您可以使用 C# 的 User32 API 中的 SetWindowPos 函数。下面是一个示例代码:
```csharp
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace LoadExternalAppToPanel
{
public partial class Form1 : Form
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
private const uint SWP_NOSIZE = 0x0001;
private const uint SWP_NOMOVE = 0x0002;
private const uint SWP_NOZORDER = 0x0004;
private const uint SWP_SHOWWINDOW = 0x0040;
private Process externalProcess;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
externalProcess = Process.Start("notepad.exe");
externalProcess.WaitForInputIdle();
SetParent(externalProcess.MainWindowHandle, panel1.Handle);
SetWindowPos(externalProcess.MainWindowHandle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
externalProcess?.Kill();
}
}
}
```
在这个示例代码中,我们使用 SetWindowPos 函数将 Notepad 窗口的位置和大小设置为与 Panel 窗口相同,并将其放置在所有其他窗口的前面。SWP_SHOWWINDOW 标志用于使窗口可见。这将确保 Notepad 窗口一直保持前置激活状态。
同样的,如果您希望在关闭窗体时终止外部应用程序,请在 FormClosing 事件中调用 Kill 方法。
阅读全文