Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Tutorial] CDs Brennen mit C# und Nero API
alexander
myCSharp.de - Member

Avatar #avatar-1566.gif


Dabei seit:
Beiträge: 2324
Herkunft: Wendlingen (Stuttgart)

Themenstarter:

[Tutorial] CDs Brennen mit C# und Nero API

beantworten | zitieren | melden

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.
Attachments
Viele Grüße
Alexander
private Nachricht | Beiträge des Benutzers
EtiketteTötet
myCSharp.de - Member



Dabei seit:
Beiträge: 2
Herkunft: Wien

beantworten | zitieren | melden

Dank auch von mir an guenni81
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

Super Tutorial
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?

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
private Nachricht | Beiträge des Benutzers
guenni81
myCSharp.de - Member



Dabei seit:
Beiträge: 206

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

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
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 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).
private Nachricht | Beiträge des Benutzers
yahoo
myCSharp.de - Member



Dabei seit:
Beiträge: 220
Herkunft: 127.0.0.1

Interessiert !

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

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.

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);
		}
	}

}
private Nachricht | Beiträge des Benutzers
yahoo
myCSharp.de - Member



Dabei seit:
Beiträge: 220
Herkunft: 127.0.0.1

Danke!

beantworten | zitieren | melden

Hallo,


menno selber wrappen! Das auch noch ;-)

Vielen Dank,

Yahoo
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

jaha! schaffst Du schon
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
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?
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

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.
Attachments
private Nachricht | Beiträge des Benutzers
guenni81
myCSharp.de - Member



Dabei seit:
Beiträge: 206

beantworten | zitieren | melden

@Gumble
Könntest du mir dein Testprojekt mal zukommen lassen???
Die Progressbar ging nämlich beim Tutorial ohne probleme mit.
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

@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...
private Nachricht | Beiträge des Benutzers
guenni81
myCSharp.de - Member



Dabei seit:
Beiträge: 206

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
Gumble
myCSharp.de - Member



Dabei seit:
Beiträge: 18

beantworten | zitieren | melden

Hier nochmal fuer den geneigten NERO user meine bisherige kleine Komponente
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
Attachments
private Nachricht | Beiträge des Benutzers
velgreyer
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: München

DLL einbinden

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
guenni81
myCSharp.de - Member



Dabei seit:
Beiträge: 206

beantworten | zitieren | melden

Wie man eine DLL Datei bei SharpDevelop hinzufügt kann ich dir leider nicht beantworten, habe noch nie damit gearbeitet.
private Nachricht | Beiträge des Benutzers
S.H.-Teichhof
myCSharp.de - Member

Avatar #avatar-2460.jpg


Dabei seit:
Beiträge: 1552
Herkunft: Sindringen

beantworten | zitieren | melden

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
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
private Nachricht | Beiträge des Benutzers
velgreyer
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: München

beantworten | zitieren | melden

Ah, jetzt funktioniert das Brennen Vielen Dank

vel
private Nachricht | Beiträge des Benutzers
guenni81
myCSharp.de - Member



Dabei seit:
Beiträge: 206

beantworten | zitieren | melden

Mich freut es aber das dieses dennoch kleine Tutorial so beliebt ist und den vielen leute behilflich sein kann
private Nachricht | Beiträge des Benutzers
velgreyer
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: München

beantworten | zitieren | melden

Es ist nunmal um einiges schlanker als die Nero-Docs

vel
private Nachricht | Beiträge des Benutzers
dandy001
myCSharp.de - Member



Dabei seit:
Beiträge: 1

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
turndevil
myCSharp.de - Member



Dabei seit:
Beiträge: 41

beantworten | zitieren | melden

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:

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
private Nachricht | Beiträge des Benutzers
GIJOE
myCSharp.de - Member

Avatar #avatar-1627.jpg


Dabei seit:
Beiträge: 142

beantworten | zitieren | melden

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
Gruss, GIJOE

Auch Anfänger haben recht auf Leben!
private Nachricht | Beiträge des Benutzers
Scrapy
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: Erde

beantworten | zitieren | melden

@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!".


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



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.
private Nachricht | Beiträge des Benutzers
GIJOE
myCSharp.de - Member

Avatar #avatar-1627.jpg


Dabei seit:
Beiträge: 142

beantworten | zitieren | melden

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
Gruss, GIJOE

Auch Anfänger haben recht auf Leben!
private Nachricht | Beiträge des Benutzers
Timur Zanagar
myCSharp.de - Member

Avatar #avatar-3412.jpg


Dabei seit:
Beiträge: 1559

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
GIJOE
myCSharp.de - Member

Avatar #avatar-1627.jpg


Dabei seit:
Beiträge: 142

beantworten | zitieren | melden

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
Gruss, GIJOE

Auch Anfänger haben recht auf Leben!
private Nachricht | Beiträge des Benutzers
GIJOE
myCSharp.de - Member

Avatar #avatar-1627.jpg


Dabei seit:
Beiträge: 142

beantworten | zitieren | melden

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
Gruss, GIJOE

Auch Anfänger haben recht auf Leben!
private Nachricht | Beiträge des Benutzers
Scrapy
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: Erde

beantworten | zitieren | melden

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

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.
private Nachricht | Beiträge des Benutzers
GIJOE
myCSharp.de - Member

Avatar #avatar-1627.jpg


Dabei seit:
Beiträge: 142

CD Informationen

beantworten | zitieren | melden

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
Gruss, GIJOE

Auch Anfänger haben recht auf Leben!
private Nachricht | Beiträge des Benutzers