问题:
如何集成C# 程序的指定面板中的单独应用程序,而不是启动它外部?
答案:
当然可以。通过利用 win32 API,可以在 C# 程序中“使用”另一个应用程序。这涉及获取外部应用程序的顶部窗口句柄并将其父窗口设置为指定的面板。为了进一步增强集成,您可以调整窗口样式以最大化其大小并删除标题栏,从而消除 MDI(多文档界面)效果。
这里有一个简化的代码片段,用于演示在包含按钮和面板的表单:
using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace EmbedApplication { public partial class Form1 : Form { [DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Launch the external application Process p = Process.Start("notepad.exe"); // Allow the process to initialize its window Thread.Sleep(500); // Embed the application within the panel SetParent(p.MainWindowHandle, panel1.Handle); } } }
或者,您可以使用 WaitForInputIdle 方法而不是 Sleep 延迟来确保外部进程正常运行在将其嵌入面板之前完全初始化:
p = Process.Start("notepad.exe"); p.WaitForInputIdle(); SetParent(p.MainWindowHandle, panel1.Handle);
有关此主题的更多见解和综合文章,请参阅以下资源:
以上是如何将外部应用程序嵌入到 C# 面板中?的详细内容。更多信息请关注PHP中文网其他相关文章!