ALLAH (cc)'IN EN GÜZEL İSİMLERİ (ESMA-ÜL HÜSNA)
el - METİN

Çok sağlam, pek kuvvetli, güçlü

     ANASAYFA    |   BEN KİMİM?   |   GALERİ   |   ZİYARETÇİ DEFTERİ   |   İLETİŞİM      Her nefis ölümü tadacaktır. Sizi bir imtihan olarak hayır ile de şer ile de deniyoruz. Ancak bize döndürüleceksiniz. - Enbiya-35

C Sharp Form İçinde Gömülü exe Çalıştırma

C Sharp Form İçinde Gömülü exe Çalıştırma
 + Yazıyı Büyüt    - Yazıyı Küçült           

C#.Net form ekranında exe çalıştırma konusu bir çoğumuzun merak ettiği hatta arayıp ta bulamadığı bir konudur. Bu yazımda c sharp programlama dilini kullanarak form içine gömülü exe uygulamalarını çalıştırmayı anlatacağım.

Ben Visual Studio 2010 kullanıyorum. Bu yazımda windows’un kendi hesap makinesini form içinde gömülü bir şekilde çalıştırmayı detaylı anlatacağım.

Öncelikle visual studio üzerinde yeni bir c# projesi açalım. Kaynak: www.mustafakarsli.com

Windows Form Application’ı seçerek Proje adını (ben execalistir yazdım) yazalım ve Ok butonuna basarak projemizi açalım.

Projemiz açıldıktan sonra form üzerine 1 adet buton ve 1 adet panel ekleyelim ve aşağıdaki gibi düzenleyelim.

C Sharp Buton ve Panel Ekleme

Formu düzenledikten sonra F7 tuşuna basarak formun kod ekranını açalım ve aşağıdaki kütüphaneleri kod ekranının üst kısmına (using kodlarının altına) ekleyelim. En üstteki benzer kodları göreceksiniz.

using System.IO;

using System.Diagnostics;

using System.Threading;

using System.Runtime.InteropServices;

Kütüphanelerimizi projemize ekledikten sonra gelelim dll kodlarını eklemeye; Aşağıda kütüphanelerin eklenmiş haliyle kod penceresinin görüntüsünü görüyoruz.

Form1 Class Kod Ekranı

Buradaki form1 sınıfının altına yani 1 numaralı işaretli alana aşağıdaki kodları yazıyoruz. Herhangi bir değişiklik yapmadan yazınız.

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

Kodları yazdıktan sonra buton nesnesinin click olayına uygulamayı çalıştırma kodunu ekleyeceğiz. Butonun click olayını form tasarım ekranındayken buton üzerine iki kez tıklayarak açabiliriz. Aşağıda buton1’in click olayının kodunu tam veriyorum. Aşağıdaki kodları butonun click olayına yazalım.

privatevoid button1_Click(object sender, EventArgs e)

{

   string exeyolu = "calc.exe";

   Process calistir = Process.Start(exeyolu);

   while (calistir.MainWindowHandle == IntPtr.Zero || !IsWindowVisible(calistir.MainWindowHandle))

   {

        System.Threading.Thread.Sleep(10);

        calistir.Refresh();

   }

Kaynak: www.mustafakarsli.com

   calistir.WaitForInputIdle();

   SetParent(calistir.MainWindowHandle, this.panel1.Handle);

   SendMessage(calistir.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);

   }

Kaynak: www.mustafakarsli.com

Yukarıdaki kod ile programımız bitmiş oluyor. Buradaki dikkat edilmesi gereken açacağımız exe dosyasının adresini verdiğimiz yerdir. Exe dosyasının adresini string exeyolu = "calc.exe"; satırıyla tanımlıyoruz. Buraya direk calc.exe yazdım tam adres beliritlmediği için program direk Windows/system32 klasörü içindeki uygulamalara bakıyor.

Eğer başka bir yerdeki uygulamayı çalıştırmak istiyorsanız. “C:\\Windows\\System32\\calc.exe” şeklinde adres verilmelidir.

Programımızı F5 ile derleyip çalıştıracak olursak sorunsuz bir şekilde çalıştığını göreceksiniz. Program çalıştıktan sonra butona tıklanıldığında hesap makinesinin gömülü olarak panel içinde açıldığını göreceksiniz.

C Sharp Formda exe Çalıştırma

Siz de uygulamaları çoğaltabilirsiniz. Ben temel olarak bir exe ile anlattım. Aşağıda Programın tam kodunu görebilirsiniz.

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.IO;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;

namespace execalistir
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

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

        private void button1_Click(object sender, EventArgs e)
        {
            string exeyolu = "calc.exe";
            Process calistir = Process.Start(exeyolu);

            while (calistir.MainWindowHandle == IntPtr.Zero || !IsWindowVisible(calistir.MainWindowHandle))
            {
                System.Threading.Thread.Sleep(10);
                calistir.Refresh();
            }

            calistir.WaitForInputIdle();
            SetParent(calistir.MainWindowHandle, this.panel1.Handle);
            SendMessage(calistir.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
        }
    }
}

Kaynak: www.mustafakarsli.com

İlerleyen günlerde yeni derslerde görüşmek üzere sağlıcakla kalınız.

Mustafa KARSLI  Kaynak: www.mustafakarsli.com

( 16036 ) kez okundu     -     19.04.2013    Tweetle     
C Sharp Form İçinde Gömülü exe Çalıştırma, c# exe gömme, gömülü uygulama çalıştırma, csharp exe çağırma, c sharp embedded exe, exe embedded, csharpta exe çalıştırma, c sharp uygulama çalıştırma, embed c sharp, embed c#, formda exe çalıştırma, form içinde exe çalıştırma, form da uygulama çağırma exe embedded on forms, mustafa karslı
Ziyaretçi Yorumları
( 12 ) Yorum
Tümünü Göster
ibrahim - denizli - 27.01.2017 20.30
     using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; using System.Threading; namespace _22_03_Disk_Klasor_Dosya_Listleyici { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DriveInfo drv; DirectoryInfo folder; string[] myDisks; TreeNode tNod; private object listBox1; private object selected; private object _listView; private object textbox1; private object yeniform; public object Items { get; private set; } private void Form1_Load(object sender, EventArgs e) { treeView1.ImageList = imgDisk; myDisks = Environment.GetLogicalDrives(); comboBox1.Items.AddRange(myDisks); DriveIcon(); } private void DriveIcon() { foreach (string item in myDisks) { drv = new DriveInfo(item); tNod = new TreeNode(drv.Name); switch (drv.DriveType) { case DriveType.CDRom: tNod.ImageIndex = 0; tNod.SelectedImageIndex = 0; break; case DriveType.Fixed: tNod.ImageIndex = 3; tNod.SelectedImageIndex = 3; break; case DriveType.Removable: tNod.ImageIndex = 4; tNod.SelectedImageIndex = 4; break; default: break; } tNod.Name = drv.Name; treeView1.Nodes.Add(tNod); } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { KlasorDosya(e.Node); } private void KlasorDosya(TreeNode treeNode) { treeNode.Nodes.Clear(); folder = new DirectoryInfo(treeNode.FullPath); if (folder.Exists) { int sayacKlasor = 0; try { foreach (DirectoryInfo item in folder.GetDirectories()) { treeNode.Nodes.Add(key: item.FullName, text: item.Name, imageIndex: 2); sayacKlasor++; } } catch { }; stripKlasor.Text = sayacKlasor + " adet klasör var."; } listView1.Clear(); listView1.Columns.Add("Dosya Adı"); listView1.Columns.Add("Oluşturulma Zamanı"); listView1.Columns.Add("Boyut"); listView1.View = View.Details; listView1.FullRowSelect = true; listView1.GridLines = true; if (folder.Exists) { int sayacDosya = 0; try { foreach (FileInfo item in folder.GetFiles()) { ListViewItem lvi = new ListViewItem(); lvi.Text = item.Name; lvi.SubItems.Add(item.CreationTime.ToLongDateString()); string boyutAdi; decimal boyut = BoyutCevir(item.Length, out boyutAdi); lvi.SubItems.Add(boyut.ToString("n5") + boyutAdi); listView1.Items.Add(lvi); sayacDosya++; } } catch { } stripDosya.Text = sayacDosya + " adet Dosya bulunmakta"; } listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); } /// /// BoyutCevir decimal tipinde sonuç döndürür. /// /// Dosyanın boyutunu bayt cinsinden alır /// GB, MB, KB, Byte adlarını da out ile dışarı atar. /// Boyut tipine göre çevrilir ve decimal tipindedir. Boyut adı string /// tipinde dışarı atılır. public decimal BoyutCevir(decimal boyut, out string boyutAdi) { int kb = 1024; int mb = kb * 1024; int gb = mb * 1024; decimal sonuc = 0; if (boyut > gb) { sonuc = boyut / gb; boyutAdi = " GB"; } else if (boyut > mb) { sonuc = boyut / mb; boyutAdi = " MB"; } else if (boyut > kb) { sonuc = boyut / kb; boyutAdi = " KB"; } else { sonuc = boyut; boyutAdi = " B"; } return sonuc; } private void listView1_SelectedIndexChanged(object sender, EventArgs e) { ListViewItem item = listView1.SelectedItems[0]; textBox1.Text = item.SubItems[0].Text; } private void Açıver_Click(object sender, EventArgs e) { Form2 frm = new Form2(); Form2.yeniform = textbox1.text(); yeniform.Show(); Process çalıştır = Process.start(@"Program Files (x86)...exe"); while (çalıştır.mainWindowhandle == InPtr.Zero ! IsWindowVisible(çalıştır.mainWindowhandle)); { System.Threading.Thread.sleep(10); çalıştır.refresh(); } } private void textBox1_TextChanged(object sender, EventArgs e) { listView1.Items.Add(textBox1.Text); } } } kodumun tam hali nasıl hocam bi bakıp yanıtlarmısınız acaba tek sorunum istedeğim şey açılan 2. formda .exemi açablimek monitör eklesem form2 ye açılırmı diye deneyeceğim vs 2015 güncelleme alıyor biter bitmez deniyeceğim saygılarımla

ibrahim - denizli - 27.01.2017 20.27
      private void listView1_SelectedIndexChanged(object sender, EventArgs e) { ListViewItem item = listView1.SelectedItems[0]; textBox1.Text = item.SubItems[0].Text; } private void Açıver_Click(object sender, EventArgs e) { Form2 frm = new Form2(); Form2.yeniform = textbox1.text(); yeniform.Show(); Process çalıştır = Process.start(@"Program Files (x86)...exe"); while (çalıştır.mainWindowhandle == InPtr.Zero ! IsWindowVisible(çalıştır.mainWindowhandle)); { System.Threading.Thread.sleep(10); çalıştır.refresh(); bi kodda benden olsun umarım arayanalrın işine yarar visual studyo codes debug yapılmıştır

erkan - mersin - 12.09.2016 19.20
     tşkler cok güzel calışma actımız exeyı butonla tekrar kapatabilirmiyiz

mustafa türker - BURSA - 20.08.2016 01.33
     Allah razı olsun kardeşim cok güzel anlatmışsın ...YAZILARININ DEVAMINI BEKLERİZ SENİN GİBİ ARKADAŞLARA İHTİYAC VAR BU ÜLKEDE SİZİNLE İRTİBATA GECECEĞİMİZ MAİL ADRESİ PAYLAŞIRMISINIZ SAĞ OLUN VAR OLUN

Ömer - Bursa - 21.04.2015 17.06
     Merhaba. değerli bilgileriniz için çok teşekür ederim. lakin benim sorunum. devexpress kullanarak yapılmış bir programı panel içinde "doğru" çalışmaması. yani panel içinde bulunan "ürün ekle" dölümü çalışırken. "ürün listele" bölümü çalışmamakta. bunu neden yapar.

Yusuf BAYRAM - Van/Merkez - 01.03.2015 20.51
     Gerçekten harika bi calisma olmuş bende nasıl yapacağımı düşünüyordum çok teşekkür ediyorum Allah yardımcınız olsun

Caner Gülgeç - Trabzon - 07.12.2014 04.04
     Öncelikle bu değerli bilgi için teşekkürler. Yöntem hesap makinesi üzerinde işe yarıyor. Ancak office word 2013 üzerinde yapmayı başaramadım. Word önce gömülü açılmaya başlıyor ancak sonrasında kendisini dışarı atıyor. Bu durum için tavsiyelerinizz var mı?

Yakup Bozdaş - İSTANBUL - 17.07.2014 16.17
     Elinize sağlık Mustafa Bey,çok yararlı hizmetler sunuyorsunuz. Bu emekleriniz için Allah c.c. sizlerden razı olsun..Selam ve Dua ile...

----- Mustafa KARSLI ---->
Teşekkür ederim Yakup Bey. Allah cümlemizden razı olsun inşaallah. Allah'a emanet. Selametle...

ayşe - amasya - 07.06.2014 03.10
     mrb bana c#ta access tabanlı emlak otomasyonu lazm yardm edebılırmsnz

İlker - samsun - 02.03.2014 04.53
     merhaba mustafa bey ben işlemlerinizi gerçekleştirdim fakat program açılışında önce şifre denetimi geliyor sonra guncelleme kontrolu daha sonra programın kendisi açılıyor ama form dışında açılmaktadır. bütün işlemleri nasıl formun içinde açabilirim sadece şifre denetim işlemi formun içerisinde açılmakta diğerleri ise formun dışında yer almaktadır. yardımlarınızı rica ederim.

----- Mustafa KARSLI ---->
İlker Bey tüm işlemleri ayrı ayrı panelde yapıp sonra panel gizle göster yaparak tek form üzerinde çalışabilirsiniz.

Murat - Eskişehir - 27.11.2013 13.41
     Ben WPF de çalıştırmak istiyorum fakat SetParent(calistir.MainWindowHandle, this.panell.AddHandler(); satırında hata alıyorum nasıl düzeltebilirim

----- Mustafa KARSLI ---->
hata aldığınız satırın sonu Handle olacak sanırım ondan. Çünkü AddHandler diye bir komut yok yukarıda.

Yakup TAŞLIBEYAZ - ERZURUM - 31.05.2013 10.03
     Gerçekten Çok Teşekkür Ederim

Yorum Ekle
Güvenliğiniz için iP adresiniz kaydedilmektedir. Herhangi bir Hukuki Dava ile karşılaşmamak için hakaret içeren sözler ve argo kelimeler kullanmayınız.
İsim
:
Yorum
:
En fazla 400 karakter
Şehir
:
E-Posta
:
E-Posta adresi Yayınlanmaz
(Güvenliğiniz için ip adresiniz (54.227.126.69) kaydedilecektir)
  Yeni Dersleri Takip etmek İstiyorum. Adresime E-Posta Gelmesini Onaylıyorum.
BENZER YAZILAR
Android
Bilgisayar Ağları
Bilişim Teknolojileri
C Sharp
Çalışmalar
Donanım
Fireworks
Flash - Action Script 3
HTML
JavaScript
Kişisel Gelişim
Okul Öncesi Etkinlik
PHP
Silverlight
Şanlı Tarihimiz
  Zamanlanmış Duyuru/Ödev Bulunmamaktadır...  
Kişisel resim ve yazıları kullanmak yasaktır. Bunun dışındaki dersleri İsim ve Kaynak göstermek şartıyla kullanmak serbesttir.
 Aktif ziyaretçi : 6
 Bugün : 627
 Toplam : 1323773
Mustafa KARSLI - Bilişim Teknolojileri Öğretmeni © 2008 - 2017  
Site Haritası

 

6