Jump to content

C# Ile Cd'ye Yazdırma


wmismail

Recommended Posts

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.

image001.jpg

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.

image002.jpg

Ş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

image003.jpg

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

image004.jpg

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

image005.jpg

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

image006.jpg

image007.jpg

Ve mükemmel sonuç J

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

image008.jpg

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...