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