首頁 >後端開發 >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