wmismail Posted August 10, 2008 Share Posted August 10, 2008 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 kataloa 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.