myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Knowledge Base » Artikel » [Tutorial] CDs Brennen mit C# und Nero API
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Seiten (2): [1] 2 nächste » Antwort erstellen
Zum Ende der Seite springen  

[Tutorial] CDs Brennen mit C# und Nero API 6 Bewertungen - Durchschnitt: 10,006 Bewertungen - Durchschnitt: 10,006 Bewertungen - Durchschnitt: 10,006 Bewertungen - Durchschnitt: 10,006 Bewertungen - Durchschnitt: 10,00

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
alexander alexander ist männlich
myCSharp.de-Poweruser/ Experte

avatar-1566.gif


Dabei seit: 19.07.2003
Beiträge: 2.217
Entwicklungsumgebung: Visual Studio 2005
Herkunft: Wendlingen (Stuttgart)


alexander ist offline

[Tutorial] CDs Brennen mit C# und Nero API

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

guenni81 hat sich die Mühe gemacht und ein Tutorial geschrieben, welches beschreibt wie man mit Hilfe von C# sowie NeroAPI CDs brennen kann.

Also viel Spaß beim Lesen und nochmal vielen Dank an guenni81.


Dateianhang:
unknown CD Brennen mit C# und NeroAPI_doc.rar (35,50 KB, 7.236 mal heruntergeladen)
24.03.2004 22:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
EtiketteTötet EtiketteTötet ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.04.2004
Beiträge: 2
Herkunft: Wien


EtiketteTötet ist offline Füge EtiketteTötet Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dank auch von mir an guenni81
18.04.2004 14:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 6 Monate.
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Super Tutorial Daumen hoch
Gibts eigentlich ausser dem pdf, das bei dem NeroCom SDK dabei ist noch eine Beschreibung der Bibliothek? Bitte kein VB - davon hab ich null Ahnung. Will naemlich um die (RCW) gewrappte Library eine einfache .NET-Komponente basteln - d.h. nur die Funktionen anbieten die ich brauche. Noch leider blick ichs noch net ganz. Da steckt einfach zuviel Funktionalitaet drin.
Beispiele waeren auch klasse. Habe hier leider keinen Brenner eingebaut, deswegen wuerd ich gern mit dem Image-Recorder testen. Ich brauch doch nur den Haendler hinzufuegen und dort den string mit dem Target-path+name zu ueberschreiben?

C#-Code:
neroClass.OnFileSelImage += new NEROLib._INeroEvents_OnFileSelImageEventHandler(OnFileSelImage);

Gibts einen globalen Fehlerhandler? Hab irgendwie kein passendes Event gefunden. Welche Events sollte man denn alle behandeln?
Gibts eine Funktion um ein Verzeichnis + alle Unterverzeichnisse inkl. Inhalt einer NeroFolderClass zu adden? Oder muss ich (muehsam) mich durch alles durchhangeln und jedes File einzeln adden?

Danke schonmal fuer Hilfe smile
05.11.2004 10:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
guenni81
myCSharp.de-Mitglied

Dabei seit: 14.08.2003
Beiträge: 205


guenni81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Gumble
Es gibt leider soweit ich damals gefunden habe nur sehr wenige informationen zu der NeroAPI. Wenn du Informationen unter google suchst, bekommst du meist VB anwendung/beispiele. Es ist schon ziemlich lange her das ich das letzte mal etwas in C# gemacht habe. Das einzigste was dir bleibt ist suchen. Für das problem mit dem Pfad und den Dateien adden könntest du dir ja ne eigene Funktion schreiben wenn es wirklich nix geben sollte.
05.11.2004 17:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also ich habe mich jetzt noch weiter damit auseinander gesetzt - es klappt zwar schon ganz gut, aber sehr transparent ist das alles nicht. Ab und an krieg ich Fehler aufgrund 2 asynchroner Operations - passiert beim debuggen nicht - abhilfe durch (halb)aktives warten und statusvariable: habe vor und nach dem BurnIsoAudioCD-Aufruf eine solche Schleife um den internen hochprioren NeroThread genuegend Zeit zum werkeln zu geben:
while(longOperation == true)
{
Thread.Sleep(500);
Console.WriteLine("locked");
}
die longOperation variable entsperre ich in den EventHandlermethoden OnDoneBurn und nDrive_OnDoneEstimateTrackSize.
Ich glaube mein Design ist grausam smile
Jedenfalls klappt es nicht mehr wenn ich anstelle der Consolenausgabe (z.B. in OnProgress - Methode) den aktuellen Status in einem Form visualisiere (beinhaltet eine Progressbar). Schon allein das halten einer Instanz [edit: nein, war zu uebereifrig - siehe Beitrag spaeter] veranlasst den Nerothread keine Events mehr zu senden so dass ich natuerlich auch nie aus meiner Speerschleife rauskomme. Verstehen tu ichs nicht.
Wems interessiert, kann ich den Code ja gezippt zukommen lassen, oder ich stell ihn hier rein. Muss ihn aber erstmal bisschen saeubern smile Ziel meines Vorhabens: eine schlanke .NET dll mit der man mit einem einzigen static Aufruf einfach eine cd/dvd brennen kann - so nach der Art Burn(string label, string folder, string imagePath, string recorder, int speed, string cdtype).

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gumble am 18.11.2004 13:45.

18.11.2004 11:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
yahoo yahoo ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.11.2004
Beiträge: 220
Entwicklungsumgebung: Visual Studio 2003 EA
Herkunft: 127.0.0.1


yahoo ist offline MSN-Passport-Profil von yahoo anzeigen

Interessiert !

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Gumble (+Co)!

Wär echt super, wenn du dein Projekt mal hochladen könntest
und die URL posten, oder wenn du mir es kurz
an michijaroAThotmailDOTcom
mailst.

Vielen Dank,

Yahoo
18.11.2004 11:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

das Ganze Projekt lade ich lieber nicht hoch - nerocom wie in der Anleitung selber wrappen! geht ganz einfach. Hier der Code. Das Progressform ist ein einfaches Windows.Forms.Form mit einem Label und einer Bar.

C#-Code:
using System;
using System.IO;
using System.Collections;
using System.Threading;
using System.Drawing;
using System.Windows.Forms;
using NEROLib;

namespace CDServices_NET
{
    public delegate void OnProgressDelegate (int ProgressInPercent, string phase);

    public class CDService: System.Windows.Forms.Form
    {
        #region Attributes
        private NeroClass nClass;
        private NeroFolder nRootFolder;
        private NeroDrive nDrive;
        private NeroDrives nDrives;
        private NeroISOTrack nISOTrack;
        private string artist = "";
        private string title = "";
        private string imageTarget = @"c:\image.iso";
        private NERO_MEDIA_TYPE nType = 0;
        private int burningSpeed;
        private bool longOperation = false;
        private string phase = "";
        private ProgressForm myProgressForm = new ProgressForm();
        # endregion

        #region Events
        public event OnProgressDelegate OnNeroProgress;
        #endregion

        # region Properties
        public string Artist
        {
            get
            {
                return artist;
            }
            set
            {
                artist = value;
            }
        }

        public string Title
        {
            get
            {
                return title;
            }
            set
            {
                title = value;
            }
        }

        public string ImageTarget
        {
            get
            {
                return imageTarget;
            }
            set
            {
                imageTarget = @value;
            }
        }
        # endregion

        #region Contructors
        public CDService()
        {
            nClass = new NeroClass();
            nRootFolder = new NeroFolderClass();
            nISOTrack = new NeroISOTrackClass();
        }
        #endregion

        # region static Methods
        public static void StaticBurn( string title, string imageTarget, string path, string recorder, int burningSpeed, string mediaType)
        {
            NERO_MEDIA_TYPE nType = (NERO_MEDIA_TYPE) Enum.Parse(typeof(NERO_MEDIA_TYPE), mediaType, true);
            CDService cd = new CDService();
            cd.SelectRecoder(recorder);
            cd.ImageTarget = imageTarget;
            cd.Title = title;
            cd.AddAllToFolderRecursive(new DirectoryInfo(@path));
            cd.nISOTrack.Name = cd.Title;
            cd.Burn(burningSpeed, nType);
        }

        public static void StaticBurn( string title, string path, string recorder, int burningSpeed, string mediaType)
        {
            StaticBurn (title, @"c:\image.iso", path, recorder, burningSpeed, mediaType);
        }
        # endregion

        #region Methods

        public void Burn ( string title, string imageTarget, string path, string recorder, int burningSpeed, string mediaType)
        {
            Title = title;
            ImageTarget = imageTarget;
            AddAllToFolderRecursive(new DirectoryInfo(@path));
            SelectRecoder(recorder);
            Burn(burningSpeed);
        }

        public void Burn(int burningSpeed)
        {
            Burn(burningSpeed, NERO_MEDIA_TYPE.NERO_MEDIA_NONE);
        }

        public void Burn(int speed, NERO_MEDIA_TYPE mediaType)
        {
            if (nDrive == null)
                throw new Exception("no recorder selected");
            myProgressForm.totalNumber = 100;
            myProgressForm.Show();
            nISOTrack.RootFolder = nRootFolder;
            burningSpeed = speed;
            nType = mediaType;


            longOperation = true;
            nDrive.EstimateTrackSize(nISOTrack, NERO_ESTIMATE_FLAGS.NETS_DATA, null);


            //adding handler    
            nDrive.OnDoneBurn += new _INeroDriveEvents_OnDoneBurnEventHandler(OnDoneBurn);
            nDrive.OnProgress += new _INeroDriveEvents_OnProgressEventHandler(OnProgress);
            nDrive.OnDoneWaitForMedia += new _INeroDriveEvents_OnDoneWaitForMediaEventHandler(nDrive_OnDoneWaitForMedia);
            nDrive.OnAddLogLine += new _INeroDriveEvents_OnAddLogLineEventHandler(nDrive_OnAddLogLine);
            nDrive.OnSetPhase += new _INeroDriveEvents_OnSetPhaseEventHandler(nDrive_OnSetPhase);
            nDrive.OnAborted += new _INeroDriveEvents_OnAbortedEventHandler(nDrive_OnAborted);
            nDrive.OnDoneCDInfo +=new _INeroDriveEvents_OnDoneCDInfoEventHandler(nDrive_OnDoneCDInfo);
            nDrive.OnDoneEstimateTrackSize +=new _INeroDriveEvents_OnDoneEstimateTrackSizeEventHandler(nDrive_OnDoneEstimateTrackSize);
            nDrive.OnDoneImport += new _INeroDriveEvents_OnDoneImportEventHandler(nDrive_OnDoneImport);

            nClass.OnFileSelImage += new _INeroEvents_OnFileSelImageEventHandler(OnFileSelImage);
            nClass.OnMegaFatal += new _INeroEvents_OnMegaFatalEventHandler(nClass_OnMegaFatal);
            nClass.OnNonEmptyCDRW += new _INeroEvents_OnNonEmptyCDRWEventHandler(nClass_OnNonEmptyCDRW);
            nClass.OnWaitCD += new _INeroEvents_OnWaitCDEventHandler(nClass_OnWaitCD);
            nClass.OnWaitCDMediaInfo += new _INeroEvents_OnWaitCDMediaInfoEventHandler(nClass_OnWaitCDMediaInfo);
            nClass.OnWaitCDReminder += new _INeroEvents_OnWaitCDReminderEventHandler(nClass_OnWaitCDReminder);
            nClass.OnWaitCDDone += new _INeroEvents_OnWaitCDDoneEventHandler(nClass_OnWaitCDDone);
            nClass.OnDriveStatusChanged +=new _INeroEvents_OnDriveStatusChangedEventHandler(nClass_OnDriveStatusChanged);


            while(longOperation == true)
            {
                Thread.Sleep(500);
                Console.WriteLine("locked");
            }
            longOperation = true;

            nDrive.BurnIsoAudioCD(Artist, Title, false, nISOTrack, null, null, NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE,
                burningSpeed, nType);

            while(longOperation == true)
            {
                Thread.Sleep(500);
                Console.WriteLine("locked");
            }


        }

        private ArrayList GetRecoderList(NERO_MEDIA_TYPE property)
        {
            nType = property;
            ArrayList al = new ArrayList();

            nDrives = (NeroDrives)nClass.GetDrives(property);

            foreach(NeroDrive nd in nDrives)
            {
                al.Add(nd.DeviceName);
            }
            return al;
        }

        public void SelectRecoder(string recoderName)
        {
            nDrives = (NeroDrivesClass)nClass.GetDrives(nType);
            foreach(NeroDrive nd in nDrives)
            {
                if (nd.DeviceName == recoderName)
                {
                    nDrive = nd;
                    return;
                }
            }

            throw new Exception("cannot find selected target with Name: " + recoderName);
        }

        public void SelectRecoder(int  recoderID)
        {
            foreach(NeroDrive nd in nDrives)
            {
                if (nd.DeviceID == recoderID)
                {
                    nDrive = nd;
                    return;
                }
            }
            throw new Exception("cannot find selected target with ID: " + recoderID);
        }

        public void AddAllToFolderRecursive(DirectoryInfo rootDir)
        {
            AddAllToFolderRecursive(nRootFolder, rootDir);
        }

        private void AddAllToFolderRecursive( NeroFolder rootFolder, DirectoryInfo rootDir)
        {
            foreach (FileInfo fi in rootDir.GetFiles())
            {
                NeroFile newFile = new NeroFileClass();
                newFile.Name = fi.Name;
                newFile.SourceFilePath = fi.FullName;
                rootFolder.Files.Add(newFile);
            }
            foreach (DirectoryInfo di in rootDir.GetDirectories())
            {
                NeroFolder newFolder = new NeroFolderClass();
                newFolder.Name = di.Name;
                rootFolder.Folders.Add(newFolder);
                AddAllToFolderRecursive(newFolder, di);
            }

        }


        //Here we present the user with the results of the burn process
        private void OnDoneBurn(ref NERO_BURN_ERROR statusCode)
        {
            longOperation = false;
            if (statusCode != NERO_BURN_ERROR.NERO_BURN_OK)
                Console.WriteLine("OnDoneBurn: NOT successful! " + statusCode + " " + nClass.ErrorLog.ToString() + nClass.LastError.ToString());
            else
                Console.WriteLine("OnDoneBurn: successful! " + statusCode);

        }

        //Here we just want to display the text that NeroCOM offers us whenever a line is
        //added to the log.
        private void nDrive_OnAddLogLine(ref NERO_TEXT_TYPE TextType, ref string Text)
        {
            Console.WriteLine("nDrive_OnAddLogLine: " + TextType + " : " + Text);
        }

        //OnAborted queries whether an operation shall be aborted. We always return
        //false; if we choose to abort, we will explicitly call the Nero object’s abort method.
        private void nDrive_OnAborted(ref bool Abort)
        {
            Abort = false;
        }

        //progress reports from NeroCOM.
        private void OnProgress(ref int ProgressInPercent, ref bool Abort)
        {
            Abort = false;
            if (OnNeroProgress != null)
                OnNeroProgress(ProgressInPercent, this.phase);

            Console.WriteLine("OnProgress: " + ProgressInPercent);
            myProgressForm.currentNumber = ProgressInPercent;
            //myProgressForm.Invalidate();
        }

        //This event will be called when Nero has stopped waiting for the media.
        private void nDrive_OnDoneWaitForMedia(ref bool Success)
        {
            Console.WriteLine("nDrive_OnDoneWaitForMedia: ");
        }

        //finding out about the current phase NeroCOM is in –
        //writing data, writing lead-in or lead-out parts of the CD-ROM and related information.
        private void nDrive_OnSetPhase(ref string Text)
        {
            this.phase = Text;
            Console.WriteLine("nDrive_OnSetPhase: " + Text);
        }


        //This handler is called when a very critical error occurs.
        private void nClass_OnMegaFatal()
        {
            Console.WriteLine("nClass_OnMegaFatal: " + "A mega fatal error has occurred.");
        }

        //If the user decides to use the virtual device and not a real device more
        //information is needed. The data that NeroCOM creates will be written to an
        //image file. To provide the location of that file we need to handle this event.
        private void OnFileSelImage(ref string target)
        {
            target = ImageTarget;
            Console.WriteLine("OnFileSelImage: " + target);
        }

        //This event will be called whenever the user tries to write on a non-empty CD-RW.
        //We merely return NERO_RETURN_EXIT, although of course more sophisticated
        //ways of handling this message are possible, e.g. by asking the user if he wants to
        //erase the CD-RW.
        private void nClass_OnNonEmptyCDRW(ref NERO_RESPONSE Response)
        {
            Response = NERO_RESPONSE.NERO_RETURN_EXIT;
            Console.WriteLine("nClass_OnNonEmptyCDRW: NERO_RETURN_EXIT");
        }

        //This event will be called when Nero is waiting for a CD to be inserted into the
        //drive.
        private void nClass_OnWaitCD(ref NERO_WAITCD_TYPE WaitCD, ref string WaitCDLocalizedText)
        {
            Console.WriteLine("nClass_OnWaitCD: " + WaitCDLocalizedText);
        }

        //This event will be fired when Nero is waiting for a particular type of media.
        private void nClass_OnWaitCDMediaInfo(ref NERO_MEDIA_TYPE LastDetectedMedia, ref string LastDetectedMediaName, ref NERO_MEDIA_TYPE RequestedMedia, ref string RequestedMediaName)
        {
            Console.WriteLine("nClass_OnWaitCDMediaInfo: Waiting for a particular media type: " + RequestedMediaName);
        }

        //This event will occur when Nero has been waiting for the insertion of a CD for
        //quite a while.
        private void nClass_OnWaitCDReminder()
        {
            Console.WriteLine("nClass_OnWaitCDReminder: Waiting for CD");
        }
        #endregion

        private void nDrive_OnDoneCDInfo(INeroCDInfo pCDInfo)
        {
            Console.WriteLine("nDrive_OnDoneCDInfo: " + pCDInfo.ToString());
        }

        private void nDrive_OnDoneEstimateTrackSize(bool bOk, int BlockSize)
        {
            longOperation = false;
            Console.WriteLine("nDrive_OnDoneEstimateTrackSize: " + bOk + "Blocksize: " + BlockSize);

        }

        private void nDrive_OnDoneImport(ref bool Ok, ref NeroFolder Folder, ref NeroCDStamp CDStamp)
        {
            Console.WriteLine("nDrive_OnDoneImport: " + Ok + Folder.ToString() + CDStamp);
        }

        private void nClass_OnWaitCDDone()
        {
            Console.WriteLine("nClass_OnWaitCDDone");
        }

        private void nClass_OnDriveStatusChanged(int hostID, int targetID, NERO_DRIVECHANGE_RESULT driveStatus)
        {
            Console.WriteLine("nClass_OnDriveStatusChanged: hostID:" + hostID + " targetID:" + targetID + " " + driveStatus);
        }
    }

}
18.11.2004 12:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
yahoo yahoo ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.11.2004
Beiträge: 220
Entwicklungsumgebung: Visual Studio 2003 EA
Herkunft: 127.0.0.1


yahoo ist offline MSN-Passport-Profil von yahoo anzeigen

Danke!

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,


menno selber wrappen! Das auch noch ;-)

Vielen Dank,

Yahoo
18.11.2004 12:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

jaha! schaffst Du schon Augenzwinkern
hab den wrapper gleich strong named signiert und in den GAC eingetragen.
Wollte vorhin eigentlich noch den Code etwas erklaeren, aber es musste schnell gehen, weil ich erstmal essen gegangen bin smile
In der OnProgress (Z. 265) ist ein Aufruf der das ProgressForm mit einem neuen Wert updated - genau dieses laesst mein Programm in die Endlosschleife laufen (im Gegensatz wie ich vorhinbehauptet habe, die Instanz alleine reicht aus)
Ausserdem funktion das Progressfensterchen noch nicht wirklich - es wird nur einmal am Anfang gezeichnet und sonst nie (-> weiss, wenn ichs verschieb). Vermutlich ist da auch noch ein Design(denk)fehler. Soll das Fenster in einen eigenen Thread?
18.11.2004 13:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

also wenn ich den ProgressDialog nach dem BurnIsoAudio-aufruf modal aufrufe:
myProgressForm.ShowDialog();
dann funktionierts fast so ich mir es vorgestellt habe. Leider kann ich fuer die Zeit vor dem Brennaufruf keine Statusinformationen liefern, d.h. waehrend der erste While-schleife. Habe es nicht geschaft, da ein Fenster aufzumachen (darf nicht modal sein!) das auch funktioniert. Events wirft NeroCom da leider auch noch nicht...
anbei mal ein Bildchen wies momentan aussieht.

Gumble hat dieses Bild (verkleinerte Version) angehängt:
screen.jpg
Volle Bildgröße

18.11.2004 16:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
guenni81
myCSharp.de-Mitglied

Dabei seit: 14.08.2003
Beiträge: 205


guenni81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Gumble
Könntest du mir dein Testprojekt mal zukommen lassen???
Die Progressbar ging nämlich beim Tutorial ohne probleme mit.
19.11.2004 11:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@guenni81
danke fuer die muehen, aber so wie es laeuft reichts mir erstmal. ist ja eh nur ne komponente zum testen. haette halt gern mehr details ueber [email protected] gehabt, aber die informationen sind ja sehr spaerlich. ein (vollstaendiges) uml-ablaufdiagramm waer fein - sowas wie 'select recoder', 'add files', 'add dir', 'EstimateTrackSize'. 'burn' usw und das alles in einem zeitlichen zusammenhang bringen...
19.11.2004 13:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
guenni81
myCSharp.de-Mitglied

Dabei seit: 14.08.2003
Beiträge: 205


guenni81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Gumble
OK, wenn es dir soweit reicht wie du es hast passt es ja ;o)
Aber so ne komplette Libary die die Neroschnittstelle wrappt wäre doch wirklich was sehr feines.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von guenni81 am 20.11.2004 16:30.

20.11.2004 16:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Gumble
myCSharp.de-Mitglied

Dabei seit: 22.10.2004
Beiträge: 18


Gumble ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hier nochmal fuer den geneigten NERO user meine bisherige kleine Komponente smile
Anregungen, Verbesserungen und Wuensche gerne aeussern. Vielleicht will ja einer da weiterbasteln - dann koennte man das in die Komponentensammlung aufnehmen.
Was noch geandert werden muss, ist nur noch den 'Trace.Debug' Befehl durch eigene Tracings (oder Console.Write) zu ersetzen.

[Inhalt wrappednero.zip]
CDService_NET.cs
Progress.cs
ColorProgressBar.dll


Dateianhang:
unknown wrappednero.zip (9 KB, 2.043 mal heruntergeladen)
03.12.2004 12:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
velgreyer velgreyer ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.09.2004
Beiträge: 45
Entwicklungsumgebung: #Dev 2.0
Herkunft: München


velgreyer ist offline

DLL einbinden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich habe leider ein Problem mit der Einbindung der DLL in SharpDevelop. Ich denke dass es mehr daran liegt dass ich nicht genau weiß wie es geht. Ich habe die DLL nach der Anleitung dissambliert, bearbeitet und abschließend in die nerolib.dll zurück"-gewandelt". Ich kann die DLL aber nicht in die using-Klausel einbinden. Ich habe die DLL in das Projekt-Verzeichniss kopiert (was wohl falsch ist).
Wie binde ich die DLL richtig ein?
30.12.2004 20:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
guenni81
myCSharp.de-Mitglied

Dabei seit: 14.08.2003
Beiträge: 205


guenni81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie man eine DLL Datei bei SharpDevelop hinzufügt kann ich dir leider nicht beantworten, habe noch nie damit gearbeitet.
04.01.2005 10:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
S.H.-Teichhof S.H.-Teichhof ist männlich
myCSharp.de-Mitglied

avatar-2460.jpg


Dabei seit: 03.10.2004
Beiträge: 1.549
Entwicklungsumgebung: #Developer
Herkunft: Sindringen


S.H.-Teichhof ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Wie man eine DLL Datei bei SharpDevelop hinzufügt kann ich dir leider nicht beantworten, habe noch nie damit gearbeitet.

wird ihm ja viel nützen

du must in derProjektmape rechtsklick auf das Projekt und Reverrenz hinzufügen
04.01.2005 17:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
velgreyer velgreyer ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.09.2004
Beiträge: 45
Entwicklungsumgebung: #Dev 2.0
Herkunft: München


velgreyer ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ah, jetzt funktioniert das Brennen smile Vielen Dank

vel
05.01.2005 01:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
guenni81
myCSharp.de-Mitglied

Dabei seit: 14.08.2003
Beiträge: 205


guenni81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mich freut es aber das dieses dennoch kleine Tutorial so beliebt ist und den vielen leute behilflich sein kann
06.01.2005 22:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
velgreyer velgreyer ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.09.2004
Beiträge: 45
Entwicklungsumgebung: #Dev 2.0
Herkunft: München


velgreyer ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Es ist nunmal um einiges schlanker als die Nero-Docs großes Grinsen

vel
07.01.2005 04:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dandy001
myCSharp.de-Mitglied

Dabei seit: 08.01.2005
Beiträge: 1


dandy001 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

bin neu in diesem Forum. Habe das erwähnte Beispielprogramm bereits im Einsatz.

Frage:
Wie kann ich eine Multisession-CD/DVD erstellen?
Welche Option / welcher Befehl ist dazu notwendig?

Vielen Dank.

Gruß
dandy001
08.01.2005 19:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
turndevil turndevil ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.07.2004
Beiträge: 41
Entwicklungsumgebung: VS, SharpDevelop


turndevil ist offline Füge turndevil Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo.

Erstmal vorweg....super tutorial. Hab die Vorgehensweise gleich angewant und hat sofort geklappt.
Nur hab ich jetzt folgendes Problem bei Audio CDs.

Ich habe folgenden Code:

C#-Code:
private void BURN_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if(e.KeyCode == Keys.Space && this.chosenDrive.DeviceReady == true)
            {
                if(this.label1.Text == "AUDIO")
                {
                    int i = 0;

                    foreach(object path in files2burn)
                    {
                        NEROLib.NeroAudioTrack ntrack = new NEROLib.NeroAudioTrack();
                        FileInfo file = new FileInfo(path.ToString());

                        ntrack.Title = file.Name;
                        ntrack.Filename = file.FullName;


                        this.audioTracks.Add(ntrack);

                        this.chosenDrive.OnDoneBurn += new NEROLib._INeroDriveEvents_OnDoneBurnEventHandler(this.Burner_OnDoneBurn);
                        this.chosenDrive.OnProgress += new NEROLib._INeroDriveEvents_OnProgressEventHandler(this.Burner_OnProgress);

                        while(longOperation == true)
                        {
                            Thread.Sleep(500);
                            MessageBox.Show("locked");
                        }


                        this.chosenDrive.BurnIsoAudioCD("MEDIACENTER", "COLLECTION", false, null, this.audioTracks, null, NEROLib.NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE, 10, NEROLib.NERO_MEDIA_TYPE.NERO_MEDIA_CDR);

                    }
                }

Nun krieg ich immer diese (wie schon am Anfang erwähnte) COMException wegen den asynchronen Operationen. Auch das einbinden von Thread.Sleep() hat nicht geholfen.

Wisst ihr da weiter? Welche andere Operation soll das sein?

mfg
tom
18.01.2005 20:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen!
Hab das Projekt mal ausprobiert, funktioniert einwandfrei. Großes lob an den Ersteller.

Hab aber noch ne Frage!
Geht das auch ohne das Nero installiert ist? Wenn ich Nero wieder deinstalliere, kommt ne fehlermeldung.

Aber ehrlich, is ein super Projekt. Es nervt nur das dazu Nero installiert sein muss, und nicht die nerolib.dll allein reicht!

Gruss, GIJOE
14.02.2005 20:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@GIJOE
Nein, NERO mußt du vorher auf dem Rechner installiert haben. Die NEROLib ist glaube ich eher zum automatisieren gedacht. Nach dem Motto: "Da liegen die Daten, brenne sie mir!". Augenzwinkern


@turndevil
Nach deiner while-Schleife wird nichts passieren, da kannst du Jahre mit verbringen! großes Grinsen

C#-Code:
while(longOperation == true)
{
  Thread.Sleep(500);
  MessageBox.Show("locked");
}

this.chosenDrive.BurnIsoAudioCD("MEDIACENTER", "COLLECTION", false, null,
  this.audioTracks, null, NEROLib.NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE,
  10, NEROLib.NERO_MEDIA_TYPE.NERO_MEDIA_CDR);

Überleg' mal, BurnIsoAudioCD() startest du doch erst danach und jetzt können auch erst die Events ausgelöst werden!
Habe auch ganz schön an deiner Fehlermeldung herumgebastelt und die Lösung liegt darin, daß du alle Events, die BurnIsoAudioCD() auslösen kann mit einbinden und dir in einer TextBox ausgeben solltest. Dann weißt du auch, was die NEROLib von dir will.

Warscheinlich wirst du in deiner foreach()-Schleife nicht mehrmals hintereinander BurnIsoAudioCD() aufrufen können, da NERO maximal eine CD brennen kann. Augenzwinkern
16.02.2005 18:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Scrapy!

Wenn ich Nero wieder Deinstalliere und einige DLL´s unt eine txt Datei im Ordner belasse. Und dazu die NeroCom.dll wieder neu registriere kann ich weiter brennen.

Es muss doch möglich sein, anhand der von Nero Kopierten Dateien und Registry Einträge auch ohne einer Installation von Nero zu brennen?

Was ich damit meine ist, man schaut erst was Nero bei der Installation für Dateien Kopiert, was für Registry Einträge gemacht werden. Dann Kopiert man diese Dateien auf die seite, Exportiert die Registry Einträge. Auf einem neuen System kopiert man die Dateien in die dafür vorgesehenen Verzeichnisse, und fügt die Registry Einträge wieder zusammen. Das müßte doch funktionieren oder?

Was für Registry Einträge Nero macht hab ich schon herausgefunden, aber was für Dateien Nero wo hin spielt kann ich nicht nachvollziehen!

Gruss, GIJOE
19.02.2005 13:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Timur Zanagar Timur Zanagar ist männlich
myCSharp.de-Poweruser/ Experte

avatar-3412.jpg


Dabei seit: 10.11.2004
Beiträge: 1.457


Timur Zanagar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Aus welchem Grund sollte das ganze gut sein?

Im Enddefekt benutzt du ja Nero zum brennen und keine selbsgeschriebene Engine. Desweiteren darfst du die "Engine" auch nur benutzen wenn du das Produkt Nero installiert hast.

Falls dir das nicht gefällt, dann musst du meines erachtens nach etwas anderem suchen und nicht die Nero API benutzen.

Falls du natürlich nicht möchtest das der Benutzer dann mit Nero brennt, sondern nur mit deinem Programm, dann kannst du ja die Verknüpfungen entfernen.
19.02.2005 16:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo burning snow!

Du hast schon recht!
Der ganze Aufwand?

Es ist ja nur, weil ich wie du schon sagtest, die Nero Software nicht auf dem User PC installieren möchte!

Und ich mit meinem Wissenstand, im Moment nicht in der Lage bin, eine 100% eigene Brenner-Software zu schreiben!

Aber Danke, vieleicht gibt es ja irgend wann eine andere Möglichkeit!

Diese Nero möglichkeit ist natürlich eine sehr gute Alternative.

Gruss, GIJOE
19.02.2005 18:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Gumble!

Würde es dir was ausmachen mir dein Projekt zurferfügung zu stellen?
Ich komme mit meinem Brenner Projekt einfach nicht weiter!

Ich wär dir sehr dankbar!

Gruss, GIJOE
20.02.2005 13:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich glaub' in diesem Tread wäre jeder an einem Quellcode interessiert! smile

Würd' mal übrigens gerne wissen, wie ihr die Daten brennen könnt, ohne eine MessageBox vor und nach dem Brennvorgang zu setzen?
Ich denke, es liegt nicht direkt an der MessageBox, denn ich könnten schwören das es vorher auch ohne funktioniert hat!
Deswegen frag' ich - ob einer auch dieses Phänomen und seine Lösung dazu kennt. unglücklich
21.02.2005 08:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

CD Informationen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen!

Weis vieleicht von euch jemand wie ich die Informationen der momentan eingelegten CD über eine Nero Funktion herausfinden kann?

z.B. CD Typ(CDRW, CDR, CDROM usw),die Größe der CD, bespielt oder nicht usw.

Hab es über die NeroCDInfoClasse schon versucht, aber ich bekomm das einfach nicht hin.

Bin für jeden Tip dankbar!

Gruss, GIJOE
23.02.2005 14:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@GIJOE:
Gegenfrage: Wozu brauchst du die Informationen? Vielleicht kann ich dir dann weiter helfen.
23.02.2005 18:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Scrapy!

1. Wenn ich z.B eine MP3 Disk erstellen möchte, und dann z.B. 701 MB zusammen habe. Möchte ich gerne, wenn der User auf Brennen geht, dass das Prog. ihm sagt: "Halt mein Freund, du hast nur eine 700 MB Disk im Laufwerk. Da muß entweder ein File weg, oder eine größere Disk rein!".

2. Wenn der User eine CD Brennen möchte, und eine CDRW im L. ligt die schon bespielt ist. Möchte ich ihm gerne sagen: "Du hast eine CDRW im L., möchtest du diese erst löschen oder den Brennvorgang abbrechen?".

Es sind halt allgemeine Informationen die ich gerne auslesen möchte!

Danke im Voraus für deine Hilfe!

Gruss, GIJOE
23.02.2005 23:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@GIJOE:
Zu 1.: Hab ich momentan auch noch keine Lösung, denn die Größe kann man nicht wie die Maximale Kapazität einer Festplatte ablesen. unglücklich

Zu 2.: Das kann man glaube ich über das aktuelle Nero-Laufwerk (mittels: NeroDrive) und NERO_MEDIA_TYPE.[...] abfragen.
Beim Löschen checke ich einfach ob Daten, in Form von Dateien oder Ordnern auf der Disk sind! Augenzwinkern

Hast du denn schon einmal etwas gebrannt, mittels der NEROLib?
23.02.2005 23:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Scrapy

Ich kann löschen, schreiben, die Brenngeschwindigkeiten auslesen, die Zeit anzeigen lassen wie lange er schon brennt, auf sämtliche Events reagieren. Aber wie gesagt, die scheiß Kapazitäten kann ich nicht auslesen. Übrigens, dein Vorschlag mit dem Löschen ist ne gute Alternative!
Vieleicht finden wir ja noch raus wie das geht. Nur schade das man über die NeroCom bzw. Nerolib nicht mehr in erfahrung bringen kann. Ich hab mir die Struktur im Objektbroser mal angesehen, und versuchte da mal etwas Licht hinein zu bringen. Aber ohne Erklärungen scheint das ein aussichtsloser Kampf zu werden.

Gruss, GIJOE
24.02.2005 16:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Scrapy

Es gibt da noch die Classe NEROLib.NeroCDInfoClass und das Interface NEROLib.INeroCDInfo. Ich kann damit nicht so richtig was anfangen, hab schon sämtliches versucht. vieleicht findest du ja was raus!

Gruss, GIJOE
24.02.2005 17:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja, habs mal so eben [...] ausprobiert!

C#-Code:
private void Brennen()
{
  //neoLaufwerk wurde mit NeroDrive erstellt[...]

  //Nero-Event erstellen:
  this.neoLaufwerk.OnDoneCDInfo +=new _INeroDriveEvents_OnDoneCDInfoEventHandler(this.neoLaufwerk_DoneCDInfo);


  neoLaufwerk.CDInfo(NERO_CDINFO_FLAGS.NERO_READ_CD_TEXT | NERO_CDINFO_FLAGS.NERO_READ_ISRC);

  //Solange er was macht ist: bBearbeite = true (Globale Variable)
  //andernfalls wir des von den Nero-Events auf false gesetzt.
  while(bBearbeite)
  {
    Application.DoEvents();;
  }

  //Brennen usw. ...
}

//Das Event auswerten:
private void DoneCDInfo(INeroCDInfo neoCDInfo)
{
  MessageBox.Show("Disktyp: " + neoCDInfo.MediaType + ", Titel: " + neoCDInfo.Title)
  //jetzt kann man alles von CDInfo abfragen!
}

NeroCDInfo kannst du nur über das Event abfragen, was du vorher erstellt hast!
Hier kannst du dann den Disktyp, Schreibbarkeit, Titel, usw. ... ausgeben lassen bzw. abfragen.

Wie kannst du denn die Zeit für den Brennvorgang anzeigen lassen?
Also ich brenne momentan Daten-CD-RWs so:

C#-Code:
NeroSpeedsClass neoGeschw = (NeroSpeedsClass)neoLaufwerk.WriteSpeeds;
iGeschw = neoGeschw.Item(neoGeschw.Count - 1); //Maximalgeschwindigkeit

neoLaufwerk.BurnIsoAudioCD("", "", false, (INeroISOTrack)neoISOTrack, null, null,
                    NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE,
                    iGeschw, NERO_MEDIA_TYPE.NERO_MEDIA_CD | NERO_MEDIA_TYPE.NERO_MEDIA_DVD_ANY);

Mit DVD-RWs hab ich so meine Schwierigkeiten - obwohls die gleiche Routine ist. :-(
Zudem ist die Geschwindigkeit nicht wirklich richtig[...].

Wie machst du das? Wäre dir dankbar über deinen Code!
24.02.2005 18:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Scrapy

Also das mit der Zeit steuer ich über die Event´s nDrive_OnAddLogLine, OnDoneBurn und einem Timer!

Wie gesagt, ich zeige hier nur die bis lang vergangene Zeit an.
Wie lange er noch brennt wird hier nicht angezeigt!

C#-Code:
//Here we just want to display the text that NeroCOM offers us whenever a line is
//added to the log.
private void nDrive_OnAddLogLine(ref NERO_TEXT_TYPE TextType, ref string Text)
{
timer2.Start();
switch (Text)
{
case "Caching of files started":
{
textBox1.Text += "Einspielen der Daten wurde gestartet!" + Environment.NewLine;
break;
}
....
....
....
....
}
}

//Here we present the user with the results of the burn process
private void OnDoneBurn(ref NERO_BURN_ERROR statusCode)
{
timer2.Stop();
timmerk = 0;
longOperation = false;
if (statusCode != NERO_BURN_ERROR.NERO_BURN_OK)
MessageBox.Show("OnDoneBurn: NOT successful! " + statusCode + " " + neroclass.ErrorLog.ToString() + neroclass.LastError.ToString());
else
MessageBox.Show("OnDoneBurn: successful! " + statusCode);
}

private int timmerk = 0;
private TimeSpan ts;
private void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timmerk += 10000000;
ts = new TimeSpan(timmerk);
label5.Text = "Verstrichene Zeit " + ts.ToString();
}

Die Brenngeschwindigkeiten des momentan verwendeten Medium lese ich wie folgt aus!

C#-Code:
                for (int i = ndrive.get_AvailableSpeeds(NEROLib.NERO_ACCESSTYPE.NERO_ACCESSTYPE_WRITE, NEROLib.NERO_MEDIA_TYPE.NERO_MEDIA_CDRW).Count -1; i >= 0 ; i--)

Was mich jetzt noch interessieren würde, du konkartinierst zwei enum Objekte zusammen? Oder wie ist das mit dem "|" zu verstehen? Das seh ich so oft, und kann nix damit anfangen! was passiert da wenn man das macht?

C#-Code:
  neoLaufwerk.CDInfo(NERO_CDINFO_FLAGS.NERO_READ_CD_TEXT | NERO_CDINFO_FLAGS.NERO_READ_ISRC);

oder

C#-Code:
NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE,
                    iGeschw, NERO_MEDIA_TYPE.NERO_MEDIA_CD | NERO_MEDIA_TYPE.NERO_MEDIA_DVD_ANY);

Muss mir jetzt mal dein Beispiel auf der Zunge zergehen lassen!

Gruss, GIJOE
24.02.2005 20:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@GIJOE
Ich Konkarti... was? ;-)

Nein, ich weiss schon was du meinst, das: | (Logisches Oder).
Ein kleines Rechenbeispiel der Logik:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

Das ganze gibts natürlich auch mit: & (Logisches Und).
Wieder ein kleines Rechenbeispiel:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

Gleiches gilt bei || (Oder beim Vergleich) bzw. && (Und beim Vergleich).
So kann man die logischen Werte (bitweise) zusammenziehen!
Dieses: "NERO_MEDIA_TYPE.NERO_MEDIA_CD" ist eben nur ein Bitmuster, ein: Flag.
Wenn du mehrere zusammen haben möchtest, kannst die Sie durch ein & bzw. | nach der oben angegebenen Rechnung kombinieren.

Beim meinem Brennvorgang z.B.:

C#-Code:
neoLaufwerk.BurnIsoAudioCD("", "", false, (INeroISOTrack)neoISOTrack, null, null, NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE, iGeschw, NERO_MEDIA_TYPE.NERO_MEDIA_CD | NERO_MEDIA_TYPE.NERO_MEDIA_DVD_ANY);

kannst nicht nur CD-R/Ws brennen sonder auch alle DVD-+R/Ws, weil die Flags über ein Oder (1 | 1 = 1) verknüpft sind!

(Tut mir leid, aber sowas kann ich nicht wirklich gut erklären - war ein Versuch!)


Sag mal wie brennst du eigentlich DVD's? Bei mir geht das mal und mal nicht! Wie gesagt ich mach das ja auch nur über den oben genannten Aufruf! :-(
24.02.2005 21:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GIJOE GIJOE ist männlich
myCSharp.de-Mitglied

avatar-1627.jpg


Dabei seit: 16.12.2004
Beiträge: 142
Entwicklungsumgebung: C# DotNet


GIJOE ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Scrapy

Hast du sehr schön erklärt!

Hab das in der Schule gehabt, eigentlich hätte ich das wissen müssen.
Aber man vergißt halt vieles mit der Zeit!

Ich brenne keine DVD´s, hab leider noch keinen DVD Brenner.

Dein Beispiel mit den Medium Infos funktioniert, aber da hätte ich noch ne Frage!

Die freie Speichergröße wird in Blöcken angegeben. wie wird das umgerechnet?

Und woher wustest du das der Methodenaufruf eine "&&,|| oder |" entgegen nimmt?

Und "|" = xor, "||" = oder, "&&" = und, lieg ich da richtig?

Hat Dir meine Geschwindigkeitsausleserei was gebracht?

Gruss, GIJOE?
24.02.2005 21:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Scrapy Scrapy ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.01.2004
Beiträge: 12
Herkunft: Erde


Scrapy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@GIJOE
Das Wissen hat man sich eben über die Jahre angeeignet - aber wie du siehst weiß ich immer noch nicht alles - leider bekommt man dafür keine Ausbildung.
Man muß aktiv dran bleiben! Augenzwinkern


Die Bitweise Verknüpfung mit den Flags kannst du mit allen Enummerationen (enum in C#) machen! Vielleicht ergeben aber nicht alle Verknüpfungen ein Sinn, das liegt dann aber an dem, der das programmiert hat. cool


Für das Umrechnen von Blöcken in Byte hab ich leider keine Formel.
Aber wenn die Disk leer ist, hast du die maximale Anzahl an Blöcken von der Disk aus CDInfo. Wenn du dann die EstimateTrackSize davon abziehst und einen Wert größer als Null raus gekommst, dann ist die Disk noch nicht voll! (Theoretisch, denke ich.)


Nein, also && bzw. || aber auch == kannst du in C# nur bei Vergleichen benutzen, sonst nicht!
Die Bitweise Verknüpfung kannst nur bei Flags (enum in C#) - also wenn du was bitweise Verknüpfen möchstest verwenden! Bitweise könntest du auch mit einem = vergleichen.
Nochmal zur Überischt:
| - Bitweises ODER
& - Bitweises UND
^ - Bitweises XOR
= - Bitweises ISTGLEICH
|| - Vergleichs ODER
&& - Verlgeichs UND
== - Vergleichs ISTGLEICH


Also ich weiß nicht, das mit den Geschwindigkeiten haut irgendwie nicht ganz hin.
Hab das bei mir mit:

C#-Code:
NeroSpeedsClass neoGeschw = (NeroSpeedsClass)neoLaufwerk.WriteSpeeds;

gemacht aber da bekommt man meist utopisch hohe Werte und bei dir sehr kleine!
Frag' nicht was richtig ist!? Die CD/DVDs die ich eingelegt habe, hatten z.T. ganz andere Geschwindigkeiten angegeben!
Beide Methoden klingen irgendwie richtig, geben jedoch völlig andere Werte aus!

Probier's mal aus verwundert
24.02.2005 22:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 15 Jahre.
Der letzte Beitrag ist älter als 11 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.06.2019 09:12