À l'aide de l'API win32, il est possible de "manger" une autre application. Fondamentalement, vous obtenez la fenêtre du haut pour que la demande et celle du parent à la poignée du panneau que vous voulez le placer. Si vous ne voulez pas le MDI effet de style, vous devez également ajuster le style de la fenêtre pour la faire exploiter et supprimer la barre de titre.
Voici un simple exemple de code où j'ai un formulaire avec un bouton et un panneau:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process p = Process.Start("notepad.exe");
Thread.Sleep(500); // Allow the process to open it's window
SetParent(p.MainWindowHandle, panel1.Handle);
}
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
}
}
Je viens de voir un autre exemple où ils ont appelé WaitForInputIdle au lieu de dormir. Donc, le code devrait ressembler à ceci:
Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
SetParent(p.MainWindowHandle, panel1.Handle);
Le Projet de Code a un bon article, l'ensemble du processus: de l'Hébergement EXE Applications dans un projet WinForm