AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiNeroApi - Dateien übergeben

Ein Thema von Gina · begonnen am 13. Mär 2005 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#1

DelphiNeroApi - Dateien übergeben

  Alt 13. Mär 2005, 11:59
Hallochen,

habe mich etwas intensiver mit der DelphiNeroApi auseinandergesetzt und mir dabei auch das Sample und die Demo näher angeschaut. Soweit hab ich das relativ gut verstanden. Das Einzige, was ich noch nicht entdeckt habe ist, wie ich die Dateien/Ordner, die gebrannt werden sollen, übergebe. In der Demo ist zwar eine TreeView, wo man offensichtlich per Drag&Drop Dateien draufziehen soll, aber da passiert irgendwie nix Ich bin auch schon mit dem debugger durchgegangen, aber dieser Teil scheint nicht enthalten zu sein...

Hat jemand Erfahrung mit der Api und kann mir da einen kleinen Tipp geben, wo ich nachschauen kann?

Im Forum hier und per Google hab ich schon intensiv gesucht, aber leider nichts passendes gefunden.

Vielen Dank, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#2

Re: DelphiNeroApi - Dateien übergeben

  Alt 13. Mär 2005, 16:16
So, hier mal meine aktuelle Test-Unit, vielleicht könnt ihr mir dann besser helfen

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, NeroAPI, NeroUserDialog, NeroIsoTrack, dnapiComponents, StdCtrls, Registry;

type
  TForm1 = class(TForm)
    ListBoxBurn: TListBox;
    ListBoxSize: TListBox;
    Button1: TButton;
    Button2: TButton;
    dnapiSettings1: TdnapiSettings;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    NeroIsoTrack: CNeroIsoTrack;
    RootIsoItem: PNeroIsoItem;
    NeroSettings: PNeroSettings;
    NeroDeviceHandle: NERO_DEVICEHANDLE;
    NeroProgress: NERO_PROGRESS;
    NeroCDInfo: PNeroCDInfo;
    NeroWriteCD: PNeroWriteCD;
    NeroDeviceInfos: PNeroSCSIDeviceInfos;
    NeroIsoItem: PNeroIsoItem;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function IdleCallback(pUserData: Pointer): Boolean; cdecl;
begin
  Application.ProcessMessages;

  Result := False;
end;

function ProgressCallback(pUserData: Pointer; dwProgressInPercent: DWORD): BOOL; cdecl;
begin
  Form1.ListBoxBurn.items.add(FormatFloat('000 ', dwProgressInPercent) + '%');

  Application.ProcessMessages;

  Result := IdleCallback(pUserData);
end;

function AbortedCallback(pUserData: Pointer): BOOL; cdecl;
begin
  Result := True; --> ist das richtig?
end;

procedure AddLogLine(pUserData: Pointer; _type: NERO_TEXT_TYPE; text: PChar); cdecl;
var
  Header: String;
begin
   case _type of
    NERO_TEXT_INFO: // informative text
    begin
      MessageDlg(text, mtInformation, [mbOK], 0);
    end;
    NERO_TEXT_STOP: // some operation stopped prematurely
    begin
      MessageDlg(text, mtError, [mbOK], 0);
      header := '# ';
    end;
    NERO_TEXT_EXCLAMATION: // important information
    begin
      MessageDlg(text, mtWarning, [mbOK], 0);
      header := '! ';
    end;
    NERO_TEXT_QUESTION: // a question which requires an answer
    begin
      MessageDlg(text, mtConfirmation, [mbOK], 0);
    end;
    NERO_TEXT_DRIVE:       // a message concerning a CD-ROM drive or recorder
    begin
      MessageDlg(text, mtInformation, [mbOK], 0);
    end;
  end;
end;

procedure SetPhaseCallback(pUserData: Pointer; text: PChar); cdecl;
begin
  ShowMessage(text);
end;

procedure DisableAbortCallback(pUserData: Pointer; abortEnabled: BOOL); cdecl;
begin
  if abortEnabled then
      ShowMessage('The current process cannot be interrupted')
   else
    ShowMessage('The process can be interrupted again');
end;

procedure SetMajorPhaseCallback(pUserData: Pointer; phase: NERO_MAJOR_PHASE; reserved: PVoid); cdecl;
begin
  case phase of
    NERO_PHASE_BUP_ACTIVATED: ShowMessage('BUP Activated');
    NERO_PHASE_CONTINUE_FORMATTING: ShowMessage('Continue Formating');
    NERO_PHASE_DONE_CACHE: ShowMessage('Done Caching');
    NERO_PHASE_DONE_SIMULATE: ShowMessage('Done Simulation');
    NERO_PHASE_DONE_SIMULATE_NOSPD: ShowMessage('Done Simulation - No SPD');
    NERO_PHASE_DONE_TEST: ShowMessage('Done Testing');
    NERO_PHASE_DONE_WRITE: ShowMessage('Done Writing');
    NERO_PHASE_DONE_WRITE_NOSPD: ShowMessage('Done Writing - No SPD');
    NERO_PHASE_DVDVIDEO_DETECTED: ShowMessage('DVD Video Detected');
    NERO_PHASE_DVDVIDEO_REALLOC_COMPLETED: ShowMessage('DVD Video Relloc Completed');
    NERO_PHASE_DVDVIDEO_REALLOC_FAILED: ShowMessage('DVD Video Realloc Failed');
    NERO_PHASE_DVDVIDEO_REALLOC_NOTNEEDED: ShowMessage('DVD Video Realloc Not Needed');
    NERO_PHASE_DVDVIDEO_REALLOC_STARTED: ShowMessage('DVD Video Relloc Started');
    NERO_PHASE_ENCODE_VIDEO: ShowMessage('Encoding Video');
    NERO_PHASE_FORMATTING_SUCCESSFUL: ShowMessage('Formating Successful');
    NERO_PHASE_SEAMLESSLINK_ACTIVATED: ShowMessage('Seamless Link Activated');
    NERO_PHASE_START_CACHE: ShowMessage('Caching Started');
    NERO_PHASE_START_SIMULATE: ShowMessage('Simulation Started');
    NERO_PHASE_START_SIMULATE_NOSPD: ShowMessage('Simulation Started - No SPD');
    NERO_PHASE_START_TEST: ShowMessage('Testing Started');
    NERO_PHASE_START_WRITE: ShowMessage('Writing Started');
    NERO_PHASE_START_WRITE_NOSPD: ShowMessage('Writing Started - No SPD');
    NERO_PHASE_UNSPECIFIED: ShowMessage('BUP Activated');
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  flags: Cardinal;
begin
  Flags := NBF_SIMULATE + NBF_CLOSE_SESSION + NBF_BUF_UNDERRUN_PROT + NBF_DISABLE_EJECT; --> zum Test NBF_SIMULATE
  NeroIsoItem:=NeroCreateIsoItem();
  NeroIsoItem.fileName:='F:\test\test.rar';
  //insert item in to isotrack
  if Assigned(NeroWriteCD) then
     ReallocMem(NeroWriteCD, SizeOf(NERO_WRITE_CD))
  else
     NeroWriteCD :=AllocMem(SizeOf(NERO_WRITE_CD));
  NeroWriteCd.nwcdIsoTrack:=NeroCreateIsoTrackEx(NeroIsoItem,'',0) ;
  if Assigned(NeroDeviceHandle) then
     NeroCloseDevice(NeroDeviceHandle);

  NeroDeviceHandle := NeroOpenDevice(@NeroDeviceInfos.nsdisDevInfos[0]); --> Das dauert ein wenig. bei mir ist der Brenner Device 0.
  //then burn cd
  NeroBurn(NeroDeviceHandle, NERO_ISO_AUDIO_CD, NeroWriteCD, Flags, 8,@NeroProgress); --> leider brennt er nicht, bin mir nicht sicher, ob die speed stimmt
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lpdwSize, lpdwHandle: Cardinal;
  lpVerInfo, lpVS_FixedFileInfo: Pointer;
  Counter: Integer;
  nafi: PNeroAudioFormatInfo;
  ver1, ver2, ver3,ver4: WORD;
  initErr: NEROAPI_INIT_ERROR;
  Callback_1, Callback_2: NERO_CALLBACK;
  DeviceCount: Integer;
  Registry: TRegistry;
begin
  NeroIsoTrack := nil;
  RootIsoItem := nil;

  NeroDeviceHandle := nil;
  NeroDeviceInfos := nil;
  NeroCDInfo := nil;
  NeroWriteCD := nil;
  NeroSettings := nil;

  if (NeroAPIGlueConnect(nil)) then
    ShowMessage('Connected to NeroAPI !')
  else
  begin
    Showmessage('Cannot connect to NeroAPI !');
    exit;
  end;

   if (NeroGetAPIVersionEx(ver1, ver2, ver3, ver4, nil)) then
    Showmessage('Nero API version ' + IntToStr(ver1) + '.' +
      IntToStr(ver2) + '.' + IntToStr(ver3) + '.' + IntToStr(ver4))
  else
  begin
    Showmessage('Could not get NeroAPI version number !');
    exit;
  end;

  NeroSettings := AllocMem(sizeof(NERO_SETTINGS));


  Registry := TRegistry.Create(KEY_READ);
  Registry.RootKey := HKEY_LOCAL_MACHINE;
  Registry.OpenKey('SOFTWARE\Ahead\Shared', False);
  NeroSettings.nstNeroFilesPath := PAnsiChar(Registry.ReadString('NeroAPI'));
  Registry.Free;

  NeroSettings.nstVendor := '';
  NeroSettings.nstSoftware := 'ahead';
  NeroSettings.nstLanguageFile := 'nero.txt';

  Callback_1.ncCallbackFunction := @IdleCallback;
  Callback_1.ncUserData := nil;
  NeroSettings.nstIdle := Callback_1;

  NeroSettings.nstEnableOverburn := False;
  NeroSettings.nstOverburnSize := 0;

  initErr := NeroInit(@NeroSettings, nil);
  case (initErr) of
    NEROAPI_INIT_OK: begin end;
    NEROAPI_INIT_INVALID_ARGS:
      Showmessage('NeroInit() : invalid args');
    NEROAPI_INIT_INVALID_SERIAL_NUM:
      Showmessage('NeroInit() : invalid serial number');
    NEROAPI_INIT_DEMOVERSION_EXPIRED:
      Showmessage('NeroInit() : demo version has expired');
    NEROAPI_INIT_CANNOT_LOCK:
      Showmessage('NeroInit() : cannot lock');
    NEROAPI_INIT_UNSPECIFIED_ERROR:
      Showmessage('NeroInit() : unspecified error');
  else
    Showmessage('NeroInit() : unspecified error');
  end;

  if initErr <> NEROAPI_INIT_OK then
    Exit;

  NeroDeviceInfos := PNeroSCSIDeviceInfos(NeroGetAvailableDrivesEx(MEDIA_CD, nil));
   if not Assigned(NeroDeviceInfos) then
      ShowMessage('NeroGetAvailableDrives()');

  NeroProgress.npProgressCallback := ProgressCallback;
  NeroProgress.npAbortedCallback := AbortedCallback;
  NeroProgress.npAddLogLineCallback := AddLogLine;
  NeroProgress.npSetPhaseCallback := SetPhaseCallback;
  NeroProgress.npUserData := NeroSettings;
  NeroProgress.npDisableAbortCallback := DisableAbortCallback;
  NeroProgress.npSetMajorPhaseCallback := SetMajorPhaseCallback;

end;

end.
Also, irgendwie passiert nix. Er tut so, als wenn ich immer abbrechen würde. Meistens wirft er die CD aus, sagt mir aber nicht warum...
Hat jemand eine Idee?

Tausend Dank, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#3

Re: DelphiNeroApi - Dateien übergeben

  Alt 13. Mär 2005, 22:23
Der Ansatz ist schonmal richtig, aber zum hinzufügen fehlt noch ein bißchen Code.
Zu finden ist das ganze in der DemoApp im Ordner Demo.
Die wichtigen Teile für eine ISO sind unter WMDropFiles bei "case pcWrite.TabIndex of" zu finden:
Delphi-Quellcode:
          1:
          begin
            if Assigned(NeroWriteCD) then
              ReallocMem(NeroWriteCD, SizeOf(NERO_WRITE_CD))
            else
              NeroWriteCD :=AllocMem(SizeOf(NERO_WRITE_CD));

            if not Assigned(RootIsoItem) then
            begin
              RootIsoItem := NeroCreateIsoItem();
              RootIsoItem.fileName := '';
            end;
{ TODO : Add Visual return of added files and directories }
            AddFileToRootIsoItem(RootIsoItem, WhichFiles.Strings[i]);
            tvIso.Items.Add(TTreeNode.Create(tvIso.Items), WhichFiles.Strings[i]);
          end;
Die tvIso-Zeile hab ich zu Testwecken hinzugefügt (unsicher), um die Visualisierung zu testen.
Für den weiteren wichtigen Code musst du dir die Prozedur AddFileToRootIsoItem angucken.
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: DelphiNeroApi - Dateien übergeben

  Alt 13. Mär 2005, 22:32
Auch auf die Gefahr hin, jetzt Haue zu bekommen. Warum soll ich mit "meinem" Brennproggie die Nero-API nutzen? Dazu muss ja Nero auf dem Rechner installiert sein. Dann kann man auch Nero zum brutzeln nehmen. Das lässt eigentlich keine Wünsche offen.


Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#5

Re: DelphiNeroApi - Dateien übergeben

  Alt 13. Mär 2005, 22:38
Warum soll ich mit "meinem" Browser den TWebBrowser verwenden? OK, er ist bei Windows dabei.
Naja, nicht jeder hat Nero Retail und nicht jedem gefällt, das man unter Nero OEM nur Express benutzen kann. Aber im Endeffekt stelle ich mir diese Frage auch öfter, jetzt wollte ich mir aber mal aus gegebenem Anlass völlig wertfrei diese API angucken.
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#6

Re: DelphiNeroApi - Dateien übergeben

  Alt 13. Mär 2005, 22:48
Zitat von emsländer:
Auch auf die Gefahr hin, jetzt Haue zu bekommen. Warum soll ich mit "meinem" Brennproggie die Nero-API nutzen? Dazu muss ja Nero auf dem Rechner installiert sein. Dann kann man auch Nero zum brutzeln nehmen. Das lässt eigentlich keine Wünsche offen.


Gruss

EL
Hmm.... Kann man die Nero-API eigentlich noch verwenden, wenn auf dem Zielrechner 'ne abgelaufene Demoversion ist? Wenn ja, hätte ich einen generellen Verwendungszweck....

(Kann mir aber eh wurscht sein, weil kein nero hab' und 'nie haben werde)
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#7

Re: DelphiNeroApi - Dateien übergeben

  Alt 14. Mär 2005, 16:52
Hallo,

erstmal vielen dank für die Antworten, ich werde mir die entsprechenden Teile genauer ansehen... Als ich mit dem debugger durch die Demo durchbin, ist er da irgendwie gar nicht vorbeigekommen. Kein Wunder, wenn es nicht geklappt hat. Andererseits sollen die Dateien auch nicht nochmal gedropt werden, die hab ich ja schon in einer Liste. Ich muss sie nur noch übergeben...

Der Zugriff auf die Nero-Api funktioniert nur, mit einer registrierten Voll- bzw. OEM-Version.

Hintergrund für mich:

Das Programm, welches ich schreibe, soll auch nicht versierten Benutzern die Möglichkeit bieten, komfortable ein Backup incl. Verschlüsselung und Brennen ihrer Daten zu machen. Das Ganze geschieht sozusagen auf Knopfdruck. Wer sich mit Nero auskennt und lieber selbst die Einstellungen vornimmt, der kann natürlich Nero auch direkt aufrufen. Für die anderen nehme ich die Einstellungen bereits vor. Ich hoffe, nun ist es etwas verständlicher...

Ansonsten gebe ich Euch natürlich Recht.

Nochmals vielen Dank, ich melde mich alsbald mit den nächsten Testergebnissen.

Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#8

Re: DelphiNeroApi - Dateien übergeben

  Alt 14. Mär 2005, 18:44
Hmm, irgendiwe will es nicht so recht klappen. Irgendetwas fehlt wohl noch...

Wenn ich das recht verstanden habe, dann ist doch AddFileToRootIsoItem dafür da, eine alte Session einzulesen, damit er den Index übernehmen kann, oder? Da ich ja noch nicht zum brennen gekommen bin, habe ich also noch keine

Mit NeroCreateIsoItem() erstelle ich einen neuen Eintrag, oder? Doch irgendwie fehlt mir die Verbindung zwischen dem Hinzufügen und dem Aufruf von NeroBurn(...)

Kann mir das nochmal jemand genauer erklären please?

Tausend Dank, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#9

Re: DelphiNeroApi - Dateien übergeben

  Alt 14. Mär 2005, 23:42
Nein, die Funktion AddFileToRootIsoItem tut einiges mehr, das hinzufügen zu einer "alten Session" (nicht im Sinne von bereits auf dem Rohling, sondern im Programm angefangene Session) wird nur in den ersten 10 Zeilen geregelt. Der Rest sorgt für das korrekte anlegen eines Eintrags mit Datum und Uhrezeit usw. plus Unterscheidung zwischen Ordner und einzelner Datei.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#10

Re: DelphiNeroApi - Dateien übergeben

  Alt 15. Mär 2005, 17:33
Ahh, ok, soweit hab ich es jetzt auch nachvollziehen können. Vielen Dank. Und nachdem ich auch noch in der Funktion AbortedCallback Result := False gesetzt habe, hat er auch etwas gebrannt.

Nun muss ich aber als nächstes doch den alten Track auf der CD einlesen, bevor es weiter geht, denn es soll ja eine Multisession werden.
Bisher habe ich nur TdnapiIsoTrack.GetName und TdnapiIsoTrack.GetTrackType gefunden, doch das reicht sicher nicht, oder?

Außerdem läuft er auf einen Fehler, wenn ich einen Ordner brennen will. Und zwar an der Stelle, wo das DateiDatum ausgelesen wird. Ist ja auch klar, da das ja nicht für Ordner gedacht ist. Muss ich da den Teil der Demo entsprechend anpassen, oder steckt dort ein tieferer Sinn dahinter?

Vielen lieben Dank schonmal, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz