sabato 30 gennaio 2010

.Net masterizzare tramite VB.Net e c# tramite il componente XPBurn

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_masterizzare-con-la-tecnologia-net-trami_795.aspx


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.


VB.Net


Imports XPBurn


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.



VB,Net


Private WithEvents ObjMasterizza As XPBurn.XPBurnCD


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.



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


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.


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


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 preparazione:



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



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.



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



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.



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



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.




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


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




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


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.


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


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.


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


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.


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


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

2 commenti:

Anonimo ha detto...

Ciao, volevo sapere se xpburn poteva anche cancellare un disco RW, grazie e se si com'è il codice da aggiungere?

Emanuele ha detto...

Oltre al componente trovi anche una guida in cui sono riportati tutte le funzioni del componente.
Mi sembra che ci sia tale funzione.
Ciao