12 Mar 2008 C# ile CD’ye Yazdırma Kategori: C#.NET Etiketler: C#C# 2.0 1 Yorum 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. Makaleye baslamadan önce neden Windows'un bize sunmus oldugu yazma programını ya da nero gibi kabul görmüs bir programı kullanmıyoruz diyebilirsiniz. Bunun bana göre iki yanıtı var. Ilki Eger yazılım gelistiricisi isek mutlaka ve mutlaka böyle bir seyi kendimiz de yazmak istemeliyiz. Ikincisi de programımız da dogan ihtiyaçlardan dolayıdır. Sonuç olarak bizim görevimiz kullanıcıların isteklerini yerine en iyi sekilde getirmek ve onların islerini kolaylastırmaktır. Eger bir katalog programı veya benzeri bir program hazırlıyorsak hazırladıgımız program içerisinden de belirledigimiz ürünlerinin listelenerek kataloga yazdırılmasını saglamak isteyebiliriz. Bu daha mantıklı bir yaklasım sanırım J Ihtiyaçlarımız bununla da sınırlı kalmayacaktır elbette. Isi 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 olusturalım. Ilk 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 degerlerini IMAPI_CDBurner.dll'i ile dolduracagız. Ilk property bize sistemimiz de CD Yazmak için gerekli aygıt olup olmadıgını, ikinci property eger 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 islemini yaparken kullanılacak olan tampon bellegin yolunu tutacagız. Simdi 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 islemini 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ıgını kontrol edecegimiz 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ı kopyalayacagı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ıgı 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 islemi gerçeklestiriliyor. { objBurner.Burn((uint)h); } } } Burada benin yapacaklarımız simdilik bu kadar. Gelistirmek size kalmıs J Kullanıcı ara yüzünde yapacaklarımıza geçelim. Formum üzerine bir Textbox ve bir adet de Button ekleyelim. Simdi 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 Kopyalanacagı Tampon Bellek: " + nCDYaz.CdyeYazilacakAlan); } else { reLog.AppendText("CD'Ye yazmak için Bir CD Yazıcınız yok !"); } } Simdi de yazma için butona tıkladıgımıza yapılacak islemleri 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 yazacagı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 islemi Basladı..\r\n"); nCDYaz.YazmaIsleminiBaslat(this.Handle); // CD Yazma islemini baslat reLog.AppendText("Yazma isllemi bitti\r\n"); } Kod olarak yapacaklarımız simdilik bu kadar. Artık Test'e baslayabiliriz J Ilk adım basarılı J ileri diyoruz, CD sürücümde CD Yok ve asagıdaki gibi bir uyarı verdi. CD sürücüme CD takıp ileri diyorum, Yazma islemi basladı, Bitmesini bekliyoruz J Ve mükemmel sonuç J Simdi de CD'yi takıp içinde resim var mı yok mu bakalım J Iste bu kadar J Hepimize hayırlı olsun J Bu makalenin de sonuna geldik. Bir sonraki makale de görüsmek üzere. Iyi çalısmalar dilerim. Not: Makale fikrini veren Fatih Sahin'e tesekkürlerimi sunarım. Sem GöksuMCP | MCAD.NET |MCTSsem.goksu@semgoksu.com www.semgoksu.com | www.semgoksu.com Kaynaklar http://msdn.com Yorum (1) Barış Sığınç / 27.4.2009 09:57:30 Yedek almak için işimize yarayacak süper bir ipucu sağolun Yorum Yaz * Ad Soyad: * Email: * Message:
Yorum (1) Barış Sığınç / 27.4.2009 09:57:30 Yedek almak için işimize yarayacak süper bir ipucu sağolun