首页 >后端开发 >C++ >如何将外部应用程序嵌入到 C# 面板中?

如何将外部应用程序嵌入到 C# 面板中?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-06 07:55:40660浏览

How can I Embed an External Application into a C# Panel?

如何在 C# 程序的面板中嵌入外部应用程序

问题:

如何集成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);

有关此主题的更多见解和综合文章,请参阅以下资源:

  • 在 WinForm 中托管 EXE 应用程序项目: https://www.codeproject.com/Articles/560519/Hosting-EXE-Applications-in-a-WinForm-project

以上是如何将外部应用程序嵌入到 C# 面板中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn