Makale Özeti

Merhaba arkadaşlar, bu makalemiz de C# ile İmapi’nin CD ya da DVD yazdırmak için sunmuş olduğu DLL’i kullanarak CD ya da DVD yazdırma işleminin nasıl yapılacağına göz atacağız.

Makale

Makaleye başlamadan önce neden Windows’un bize sunmuş olduğu yazma programını ya da nero gibi kabul görmüş bir programı kullanmıyoruz diyebilirsiniz. Bunun bana göre iki yanıtı var. İlki Eğer yazılım geliştiricisi isek mutlaka ve mutlaka böyle bir şeyi kendimiz de yazmak istemeliyiz. İkincisi de programımız da doğan ihtiyaçlardan dolayıdır. Sonuç olarak bizim görevimiz kullanıcıların isteklerini yerine en iyi şekilde getirmek ve onların işlerini kolaylaştırmaktır.

Eğer bir katalog programı veya benzeri bir program hazırlıyorsak hazırladığımız program içerisinden de belirlediğimiz ürünlerinin listelenerek kataloga yazdırılmasını sağlamak isteyebiliriz. Bu daha mantıklı bir yaklaşım sanırım J  İhtiyaçlarımız bununla da sınırlı kalmayacaktır elbette. İşi daha da büyütüp kendi CD yazma programını yazmak isteyebiliriz. J

Konuyu anlamak için bir örnek yapalım.

Yeni bir proje oluşturalım. İlk olarak projemizin referanslarına IMAPI_CDBurner.dll’ni ekleyelim.

Sonra projemize bir class ekleyelim. Bu class içerisinde 3 adet readonly property olacak. Bu propertylerin değerlerini IMAPI_CDBurner.dll’i ile dolduracağız. İlk property bize sistemimiz de CD Yazmak için gerekli aygıt olup olmadığını, ikinci property eğer sistemimizde CD Yazma aygıtı varsa onun sürücüsünün adını tutacaktır. Üçüncü ve son property de ise CD’ye yazma işlemini yaparken kullanılacak olan tampon belleğin yolunu tutacağız. Şimdi artık Classımıza geçelim.

CDYaz.cs

 

using System;

using System.Runtime.InteropServices;

using System.Text;

namespace CSharpIleCDyeYazma

{

    public class CDYaz

    {

        private IMAPI_CDBurner.ICDBurn objBurner; ;//CD Yazma işlemini yapacak nesneyi tanımlıyoruz.

 

        private bool cdYaziciVarmi = false;

        private string cdYazici = "";

        private StringBuilder cdyeYazilacakAlan = new StringBuilder(1024);

 

        [DllImport("shell32.dll")]

        public static extern Int32 SHGetFolderPath

            (IntPtr hwndOwner, Int32 nFolder, IntPtr hToken,

            UInt32 dwFlags, StringBuilder pszPath);

 

 

        const int CSIDL_CDBURN_AREA = 0x03b;

 

//CD Yazıcı olup olmadığını kontrol edeceğimiz property

        public bool CdYaziciVarmi

        {

            get

            {

                return cdYaziciVarmi;

            }

        }

 

// CD Yazıcımızın path’ni tutacak property

        public string CdYazici

        {

            get

            {

                return cdYazici;

            }

        }

 

// CD’ye yazmamız için dosyaları kopyalayacağımız path(tampon bölge)

        public string CdyeYazilacakAlan

        {

            get

            {

                return cdyeYazilacakAlan.ToString();

            }

        }

 

// Classımızın Constructor’ını tanımlıyoruz

        public CDYaz()

        {

            objBurner = new IMAPI_CDBurner.CDBurnClass();//Burner Nesnesinin instance’ni alıyoruz.

            int i = 0;

            objBurner.HasRecordableDrive(out i);

            cdYaziciVarmi = i > 0;

 

            string drive = "???";

            objBurner.GetRecorderDriveLetter(drive, 4); // CD Yazıcının sürücü adını burner nesnesi aracılığı ile alıyoruz

            cdYazici = drive;

 

            SHGetFolderPath((IntPtr)0, CSIDL_CDBURN_AREA, (IntPtr)0, 0, cdyeYazilacakAlan); // Bu metod ile cdYeYazilacak olan tampon bilgisi cdyeYazilacakAlan propertysine set ediliyor

 

        }

 

        public void YazmaIsleminiBaslat (IntPtr h) // Bu metod ile CD Yazma işlemi gerçekleştiriliyor.

        {

            objBurner.Burn((uint)h);

        }

    }

}

Burada benin yapacaklarımız şimdilik bu kadar. Geliştirmek size kalmış J

Kullanıcı ara yüzünde yapacaklarımıza geçelim. Formum üzerine bir Textbox ve bir adet de Button ekleyelim.

Şimdi ilk olarak Form yüklenirken sistemimiz de CD yazıcı var mı? Yok mu? Diye kontrol edip. Varsa sürücü adını yazdıralım.

Form Load Eventi

        private CDYaz nCDYaz;nCDYaz = new CDYaz();

        private void frmMain_Load(object sender, EventArgs e)

        {           

            if (nCDYaz.CdYaziciVarmi)

            {

                reLog.AppendText("Sisteminiz üzerinde CD Yazıcı var.\r\n");

                reLog.AppendText("Sürücü Adı: " + nCDYaz.CdYazici + "\r\n");

                reLog.AppendText("Dosyaların Kopyalanacağı Tampon Bellek: " + nCDYaz.CdyeYazilacakAlan);

            }

            else

            {

                reLog.AppendText("CD'Ye yazmak için Bir CD Yazıcınız yok !");

            }

        }


Şimdi de yazma için butona tıkladığımıza yapılacak işlemleri yazalım.

Button Click Eventi

private void btnBurn_Click(object sender, System.EventArgs e)

        {

            string kopyalanacakKlasor = @"E:\Belgelerim\Resimlerim";// Bu klasördeki dosyaları CD’ye yazacağız

            DirectoryInfo di = new DirectoryInfo(kopyalanacakKlasor);

            FileInfo[] rgFiles = di.GetFiles("*.*");

            foreach (FileInfo fi in rgFiles) // Klasördeki dosyaları CD’ye yazılacak alana kopyala

            {

                File.Copy(fi.FullName, nCDYaz.CdyeYazilacakAlan + "\\" + fi.Name);

            }

 

            reLog.AppendText("Yazma işlemi Başladı..\r\n");

            nCDYaz.YazmaIsleminiBaslat(this.Handle); // CD Yazma işlemini başlat

            reLog.AppendText("Yazma işllemi bitti\r\n");

        }


Kod olarak yapacaklarımız şimdilik bu kadar. Artık Test’e başlayabiliriz
J

İlk adım başarılı J ileri diyoruz, CD sürücümde CD Yok ve aşağıdaki gibi bir uyarı verdi.

CD sürücüme CD takıp ileri diyorum,

Yazma işlemi başladı, Bitmesini bekliyoruz J

Ve mükemmel sonuç J

Şimdi de CD’yi takıp içinde resim var mı yok mu bakalım J

İşte bu kadar J Hepimize hayırlı olsun J

Bu makalenin de sonuna geldik. Bir sonraki makale de görüşmek üzere. İyi çalışmalar dilerim.

Not: Makale fikrini veren Fatih Şahin’e teşekkürlerimi sunarım.

Sem Göksu
MCP | MCAD.NET |MCTS

sem.goksu@semgoksu.com
www.semgoksu.com | www.semgoksu.com

Kaynaklar

http://msdn.com