Introduzione
L’articolo illustrato qui di seguito, riporta una tecnica di come registrare i file su cd e dvd.
Il codice si può utilizzare sul sistema operativo Windows XP, Windows Vista e Windows 7, con un masterizzatore per CD e/o DVD.
La versione del Framework è 2.0 o superiore (3.X, 4.0)
Prima di tutto occorre scaricare dal seguente sito http://msdn.microsoft.com/en-us/vcsharp/aa336741.aspx il componente xpburn, il quale permette di gestire l’unita cd/Dvd in cui si trova il masterizzatore.
Dopo aver compilato il sorgente della dll, aggiungete al vostro progetto il riferimento alla dll xpburn,
Creazione dell’interfaccia
Inserite nella form, quattro pulsante, due controlli progress bar, cinque controlli label, due controlli listbox ed una casella di testo, la form dev’essere simile a quella illustrata nella figura 1.
Figura 1
La casella combinata Unità, avrà il compito di visualizzare le unità per la scrittura su cd, mentre il pulsante indicante i tre puntini "..." che si trova vicino a quello con la scritta Aggiungi, permette di selezionare i file dal proprio pc, che con il pulsante aggiungi permette di aggiungere nel controllo listbox la lista dei file da registrare sul cd-rom.
Le due progress bar, indicano lo stato della preparazione e lo stato della scrittura su cd-rom.
Mentre i due pulsante masterizza ed espelli gestiscono l’unità, con il pulsante masterizza, si avvia la scrittura dei dati, mentre con il pulsante espelli apre il cassetto dell’unità.
Nella listbox situata nella parte inferiore della finestra, visualizza le varie operazioni in corso.
Stesura del codice.
Passiamo in visualizzazione codice, per scrivere il codice per eseguire le varie operazioni.
Prima di tutto, aggiungiamo lo spazio dei nomi, del componente XPburn, aggiunto precedentemente.
Qui di seguito si riporta tale codice.
Codice VB.Net
Imports XPBurn
Codice C#
using XPBurn;
Si crea a livello di form, un oggetto di tipo XPBurnCD per la gestione degli eventi e dei metodi per la gestione del CD.
Riportiamo dopo la dichiarazione di classe della form il codice per la creazione dell’oggetto XPBurnCD
Codice VB.Net
Private WithEvents ObjMasterizza As XPBurn.XPBurnCD
Codice C#
private XPBurn.XPBurnCD ObjMasterizza;
Nell’evento load della form, dobbiamo caricare nella casella combinata delle unità, i nomi delle unità montante sul pc per la scrittura dei dati su CD.
Qui di seguito si riporta il codice delle suddette operazioni.
Codice VB.Net
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Intconta As Integer
'carico in una combo i nomi delle unità dove si può masterizzare
ObjMasterizza = New XPBurnCD()
For Intconta = 0 To ObjMasterizza.RecorderDrives.Count - 1
ObjMasterizza.BurnerDrive = ObjMasterizza.RecorderDrives(Intconta)
cmbdrive.Items.Add(ObjMasterizza.ProductID)
Next
'imposto la prima unità
If cmbdrive.Items.Count > 0 Then cmbdrive.SelectedIndex = 0
End Sub
Codice C#
private void Form1_Load(object sender, EventArgs e)
{
//carico in una combo i nomi delle unità dove si può masterizzare
ObjMasterizza = new XPBurnCD();
for (int Intconta = 0; Intconta < ObjMasterizza.RecorderDrives.Count; Intconta++)
{
ObjMasterizza.BurnerDrive = ObjMasterizza.RecorderDrives[Intconta].ToString();
cmbdrive.Items.Add(ObjMasterizza.ProductID);
}
//imposto la prima unità
if (cmbdrive.Items.Count > 0)
cmbdrive.SelectedIndex = 0;
}
Analiziamo il listato di codice precedente, le prima operazione è quella di inizializzare l’oggetto di tipo XPBurnCD, terminato ciò effettua un ciclo in cui rileverà le unità cd-rom o dvd, per la scrittura dei dati. I nomi saranno riportati nella casella combinata.
Per l’evento click del pulsante Espelli, dobbiamo aprire il cassetto dell’unità cd-Rom, questo avviene tramite il metodo Eject dell’oggetto di tipo XPBurnCD.
Si riporta il codice per l’evento click del pulsante espelli.
Codice VB.Net
Private Sub BtnEspelle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEspelle.Click
'Espelle il cd
ObjMasterizza.Eject()
End Sub
Codice C#
private void BtnEspelle_Click(object sender, EventArgs e)
{
//Espelle il cd
ObjMasterizza.Eject();
}
La classe XPBurnCd, mette a disposizione diversi eventi che permettono di gestire le varie fasi della scrittura dei dati su CD. Vediamoli qui di seguito alcuni.
L’evento per la prepazione, è il momento in cui si prepara a registrare, rilevando le informazioni dei file per poi registrarli sul Cd-rom è denominato PreparingBurn. L’evento BlockProgress ci fornisce indicazioni riguardante i file che vengono scritti su CD, mentre l’evento Addprogress è la fase di preparazione dei dati su cd.
Con l’evento BurnComplete, possiamo sapere la conclusione della scrittura dei dati, mentre l’evento ClosingDisck è il momento in cui viene chiuso il CD.
Qui di seguito si riportano i vari esempi di eventi illustrati precedentemente
Evento di preparaizone:
Codice VB.Net
'evento che avviene prima di registrare. Prepara il cd
Private Sub ObjMasterizza_PreparingBurn(ByVal nEstimatedSeconds As Integer) Handles ObjMasterizza.PreparingBurn
lstTesto.Items.Add("Preparazione in corso....Tempo richiesto : " & nEstimatedSeconds)
End Sub
Codice C#
// evento che avviene prima di registrare. Prepara il cd
private void ObjMasterizza_PreparingBurn(int nEstimatedSeconds)
{
lstTesto.Items.Add(("Preparazione in corso....Tempo richiesto : " + nEstimatedSeconds));
}
Evento per la preparazione dei dati su CD
Codice VB.Net
Private Sub ObjMasterizza_AddProgress(ByVal nCompletedSteps As Integer, ByVal nTotalSteps As Integer) Handles ObjMasterizza.AddProgress
'aggiornamento della barra
PgbPreparazione.Maximum = nTotalSteps
PgbPreparazione.Value = nCompletedSteps
End Sub
Codice C#
private void ObjMasterizza_AddProgress(int nCompletedSteps, int nTotalSteps)
{
// aggiornamento della barra
PgbPreparazione.Maximum = nTotalSteps;
PgbPreparazione.Value = nCompletedSteps;
}
Evento block Progress l’avanzamento di scrittura dei dati.
Codice VB.Net
'evento che ci fornisce informazioni sullo stato della copia
Private Sub ObjMasterizza_BlockProgress(ByVal nCompletedSteps As Integer, ByVal nTotalSteps As Integer) Handles ObjMasterizza.BlockProgress
PgbScrittura.Maximum = nTotalSteps
PgbScrittura.Value = nCompletedSteps
End Sub
Codice C#
// evento che ci fornisce informazioni sullo stato della copia
private void ObjMasterizza_BlockProgress(int nCompletedSteps, int nTotalSteps)
{
PgbScrittura.Maximum = nTotalSteps;
PgbScrittura.Value = nCompletedSteps;
}
Evento relative al completamento della scrittura dei dati
Codice VB.Net
'evento che si verifica quando ha completato di copiare su cd
Private Sub ObjMasterizza_BurnComplete(ByVal status As System.UInt32) Handles ObjMasterizza.BurnComplete
PgbScrittura.Maximum = 0
PgbScrittura.Value = 0
lstTesto.Items.Add("Operazione Completata")
End Sub
Codice C#
// evento che si verifica quando ha completato di copiare su cd
private void ObjMasterizza_BurnComplete(System.UInt32 status)
{
PgbScrittura.Maximum = 0;
PgbScrittura.Value = 0;
lstTesto.Items.Add("Operazione Completata");
}
Evento di chiusura del disco
Codice VB.Net
'evento per la chiusura del cd
Private Sub ObjMasterizza_ClosingDisc(ByVal nEstimatedSeconds As Integer) Handles ObjMasterizza.ClosingDisc
lstTesto.Items.Add("Chiusura disco attendere..." & nEstimatedSeconds & " Secondi")
End Sub
Codice C#
// evento per la chiusura del cd
private void ObjMasterizza_ClosingDisc(int nEstimatedSeconds)
{
lstTesto.Items.Add(("Chiusura disco attendere..."
+ (nEstimatedSeconds + " Secondi")));
}
Siamo giunti quasi alla conclusione della stesura del codice.
Nel momento in cui viene selezionata l’unità per la scrittura del cd, dobbiamo impostare la proprietà RecorderDrivers, con il nome dell’unità CD-Rom.
Si riporta il codice delle sopraindicate operazioni.
Codice VB.Net
Private Sub cmbdrive_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbdrive.SelectedIndexChanged
'scelta dell'unità per masterizzare
ObjMasterizza.BurnerDrive = ObjMasterizza.RecorderDrives(cmbdrive.SelectedIndex).ToString
End Sub
Codice C#
private void cmbdrive_SelectedIndexChanged(object sender, EventArgs e)
{
//scelta dell'unità per masterizzare
ObjMasterizza.BurnerDrive = ObjMasterizza.RecorderDrives[cmbdrive.SelectedIndex].ToString();
}
Il pulsante aggiungi, dovrà inserire nel controllo listbox, il nome del file (contenuto nella casella di testo) mentre per l’oggetto di tipo XPBurn, tramite il metodo AddFile impostiamo il percorso e nome del file da registrare ed in quale posizione sul cdrom registrarlo. Si fa presente, che nel caso si imposta un percorso di un file situato in sottocartelle, queste verranno create (se non presenti ) nel CD, nel caso viene specificato nel secondo parameto del metodo AddFile
Mentre il pulsante trova (quello con i tre puntini “…” ) dovrà visualizzare a video una finestra di dialogo per la selezione dei file.
Qui di seguito si riportano i frammenti di codice delle suddette operazioni.
Codice VB.Net
Private Sub btnaggiungi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaggiungi.Click
If Not System.IO.File.Exists(txtfile.Text) Then Exit Sub
'aggiungo i file da copiare su cd
ObjMasterizza.AddFile(txtfile.Text, txtfile.Text)
lstFile.Items.Add(txtfile.Text)
End Sub
Private Sub btntrova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btntrova.Click
Dim DlgApri As New OpenFileDialog()
'cerco i file da copiare
If DlgApri.ShowDialog = DialogResult.OK Then txtfile.Text = DlgApri.FileName
End Sub
Codice C#
private void btnaggiungi_Click(object sender, System.EventArgs e)
{
if (!System.IO.File.Exists(txtfile.Text))
{
return;
}
// aggiungo i file da copiare su cd
ObjMasterizza.AddFile(txtfile.Text, txtfile.Text);
lstFile.Items.Add(txtfile.Text);
}
private void btntrova_Click(object sender, EventArgs e)
{
OpenFileDialog DlgApri = new OpenFileDialog();
// cerco i file da copiare
if ((DlgApri.ShowDialog() == DialogResult.OK))
{
txtfile.Text = DlgApri.FileName;
}
}
Nell’evento click del pulsante per la scrittura dei file, dobbiamo avviare la scrittura su CD. Questo avviene tramite l’esecuzione del metodo RecordDisk , il quale accetta due parametri, il primo, indica se effettuare un test (se impostato a true) mentre il secondo parametro, espelle il cd al termine della scrittura dei dati.
Di seguito riportiamo le sopraccitate operazioni.
Codice VB.Net
Private Sub BtnCopia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCopia.Click
Try
'true test simulazione
'metodo che avvia la copia su cd il primo valore se è settato a true fa un test, il secondo espelle il cd a termine operazione
ObjMasterizza.RecordDisc(False, True)
Catch ex As XPBurnException
MessageBox.Show(ex.Message)
End Try
End Sub
Codice C#
private void BtnCopia_Click(object sender, EventArgs e)
{
try
{
// true test simulazione
// metodo che avvia la copia su cd il primo valore se è settato a true fa un test, il secondo espelle il cd a termine operazione
ObjMasterizza.RecordDisc(false, true);
}
catch (XPBurnException ex)
{
MessageBox.Show(ex.Message);
}
}
Conclusioni
L’articolo ha voluto affrontare in maniera semplice ma dettagliata alcuni casi dell’utilizzo della dll XpBurn (http://msdn.microsoft.com/en-us/vcsharp/aa336741.aspx ) per la registrazione dei dati su supporti dischi, quali CD.
Tramite la voce Download potete scaricare oltre ai sorgenti relativo all’articolo per entrambi i linguaggi di programmazione, anche i sorgenti della libreria e la guida sull’utilizzo di tale componente.
Download