Masterizzare con la tecnologia .Net tramite la dll XPBurn

Articolo, che illustra come scrivere dei dati sui cd-rom tramite masterizzatore il tutto con il linguaggio di programmazione VB.Net e C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

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