Maison >développement back-end >C++ >Comment puis-je intégrer une application externe dans un panneau C# ?

Comment puis-je intégrer une application externe dans un panneau C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-06 07:55:40617parcourir

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

Comment intégrer une application externe dans un panel d'un programme C#

Question :

Comment intégrer un application séparée dans un panneau désigné d'un programme C#, plutôt que de la lancer en externe ?

Réponse :

Certainement. En utilisant l'API win32, il est possible de « consommer » une autre application au sein de votre programme C#. Cela implique d'obtenir le handle de fenêtre supérieur de l'application externe et de définir sa fenêtre parent sur le panneau désigné. Pour améliorer davantage l'intégration, vous pouvez ajuster le style de la fenêtre pour maximiser sa taille et supprimer la barre de titre, éliminant ainsi l'effet MDI (Multiple Document Interface).

Voici un extrait de code simplifié pour démontrer le processus d'intégration dans un formulaire contenant un bouton et un panneau :

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);
        }
    }
}

Vous pouvez également utiliser la méthode WaitForInputIdle au lieu du délai de mise en veille pour vous assurer que le processus externe est entièrement initialisé avant de l'intégrer dans le panneau :

p = Process.Start("notepad.exe");
p.WaitForInputIdle();
SetParent(p.MainWindowHandle, panel1.Handle);

Pour plus d'informations et un article complet sur ce sujet, reportez-vous à la ressource suivante :

  • Hébergement d'applications EXE dans un WinForm projet: https://www.codeproject.com/Articles/560519/Hosting-EXE-Applications-in-a-WinForm-project

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn