Exécuter exe dans l’onglet Projet WinForm

Je souhaiterais obtenir de l’aide pour effectuer les opérations suivantes avec une application winform que je vous écris pour ouvrir dans un onglet un fichier .exe en c # dans l’IDE de Visual Studios 2010.

Je suis actuellement en mesure d’ouvrir le programme en cliquant sur le bouton dans l’onglet souhaité à l’aide du code suivant:

ssortingng str = @"-INSERT FILEPATH HERE-";//took file path out as i have a few exes i'm wanting to add. Process process = new Process(); process.StartInfo.FileName = str; process.Start(); 

maintenant, comment puis-je faire en sorte que cet exécutable s’ouvre comme onglet ou dans un onglet, dans mon winform? Je suis ouvert aux suggestions pour faire les deux cas.

Résolu:

 using System.Runtime.InteropServices; using System.Threading; [DllImport("user32.dll", SetLastError = true)] private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); [DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); public GUI() { // Initialize form fieds InitializeComponent(); openProgram() } private void openProgram() { process.StartInfo.FileName = "-filepathhere-"; process.Start(); IntPtr ptr = IntPtr.Zero; while ((ptr = process.MainWindowHandle) == IntPtr.Zero) ; SetParent(process.MainWindowHandle, trackerPanel.Handle); MoveWindow(process.MainWindowHandle, 0, 0, this.Width - 90, this.Height, true); } 

Vous pouvez utiliser l’API SetParent pour définir le parent de la fenêtre de l’exécutable. Ajoutez un panneau à votre TabControl et utilisez le code ci-dessous pour affecter le parent de la fenêtre exécutable à celui du panneau.

 [DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); private void button2_Click(object sender, EventArgs e) { var process = new Process(); process.StartInfo.FileName = "notepad.exe"; process.Start(); SetParent(process.MainWindowHandle, panel1.Handle); } 

Pour supprimer la fenêtre du panneau, utilisez le même code mais définissez le descripteur parent sur IntPtr.Zero.

 SetParent(process.MainWindowHandle, IntPtr.Zero);