Form içinde exe çalıştırma

C# ile yazdığımız uygulamalarda kendi programramlarımızı yazdığımız sıralarda bir çok işlem için kendi modülleri yazabiliriz.
Fakat uygulamalarımızın bir kısmında başka programları çalıştırarak buralarda işlem yaptırmak isteyebiliriz.
Örneğin hesap makinesi yazmak yerine windowsun kendi hesap makinesini kullandırmak isteyebiliriz.
Diğer programlarla etkileşimli bir bot yazabiliriz.
Bu tarz ihtiyaçlarımız için windows kütüphaneleri mevcut.
Aşağıdaki kodlarla kütüphaneleri çağırıyoruz.

[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr child, IntPtr newParent);
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWindowVisible(IntPtr hWnd);
private const int WM_SYSCOMMAND = 274;
private const int SC_MAXIMIZE = 61488;

Kütüphaneleri çağırdıktan sonra “Hesap makinesini çalıştır” gibi bir butonun click eventine aşağıdaki kodları ekliyoruz.

Process proc = Process.Start("calc.exe");
while (proc.MainWindowHandle == IntPtr.Zero || !IsWindowVisible(proc.MainWindowHandle))
{
System.Threading.Thread.Sleep(10);
proc.Refresh();
}
proc.WaitForInputIdle();
SetParent(proc.MainWindowHandle, this.panel1.Handle);
SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);

Yukarıdaki kodlarla windows kütüphanelerini kullanarak “calc.exe” isimli uygulamayı çalıştırıyoruz ve bu uygulamanın
form üzerinde ekli olan “Panel” nesnesinde açılmasını sağlıyoruz.
Böylelikle uygulama form’a gömülü bir şekilde çalışacaktır.
Sizde “calc.exe” yazan yere dilediğiniz programın yolunu yazarak istediğiniz herhangi bir programı panel içerisinde görüntüleyebilir ve kullanabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir