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
return cdYazici;
// CD’ye yazmamız için dosyaları kopyalayacağımız path(tampon bölge)
public string CdyeYazilacakAlan
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