WinAPI will help
/// <summary> /// ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠ²ΠΎΠΉ handle /// Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΠΠ-ΠΎΠΊΠ½Π° /// </summary> /// <param name="hWndChild">ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°</param> /// <param name="hWndNewParent">ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΡΠ΄Π° ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ</param> /// <returns></returns> [DllImport("user32.dll")] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
The following example in the form class body binds a window of a third-party process, to panel1. You can bind directly to the form, but in my practice it turned out to be more convenient. Pay attention to the expectations - they may be needed, may not "depends on ..."
var proc = System.Diagnostics.Process.Start(exepath); //ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ // Thread.Sleep(1000); if (proc.WaitForInputIdle(TimeSpan.FromSeconds(30).TotalMilliseconds)) { //ΠΠ΄Π΅ΡΡ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ //Thread.Sleep(2000); SetParent(proc.MainWindowHandle, this.panel1.Handle); }