ALLAH (cc)'IN EN GÃœZEL Ä°SÄ°MLERÄ° (ESMA-ÃœL HÃœSNA)
el - AZÃŽZ

İzzet sahibi, her şeye galip olan, karşı gelinemeyen.

     ANASAYFA    |   Ben Kimim?      Sizin yaratılışınızda ve Allah'ın (yeryüzüne) yaydığı her bir canlıda da kesin olarak inanan bir toplum için elbette nice deliller vardır. - Câsiye, 45/4

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

( 29124 ) 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 (18.119.111.9) kaydedilecektir)
  Yeni Dersleri Takip etmek istiyorum. Adresime E-Posta Gelmesini Onaylıyorum.
BENZER YAZILAR
Android
Arduino
Bilgisayar Ağları
biliMKurdu
BiliÅŸim Teknolojileri
C Sharp
Çalışmalar
Donanım
Evde Deney
Fireworks
Flash - Action Script 3
Gezdik ve Gördük
HTML
JavaScript
KiÅŸisel GeliÅŸim
Okul Öncesi Etkinlik
PHP
Projeler
Raspberry Pi
Scratch
Silverlight
Şanlı Tarihimiz
Yarışmalar
Yazılarım
  Zamanlanmış Duyuru/Ödev Bulunmamaktadır...  
Akrabaya, yoksula ve yolda kalmış yolcuya haklarını ver, fakat saçıp savurma. Çünkü saçıp savuranlar şeytanların kardeşleridir. Şeytan ise Rabbine karşı çok nankörlük etmiştir.

İsrâ, 17/26-27
Sosyal Medya Hesabım Bulunmamaktadır. Bu nedenle başka platformlarda paylaşımım 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 : 1
 Bugün : 79
 Toplam : 2666693
Mustafa KARSLI - BiliÅŸim Teknolojileri Öğretmeni © 2008 - 2024  
Site Haritası

 

1