Einzelnen Beitrag anzeigen

Ducksoul

Registriert seit: 19. Apr 2006
Ort: Ilmenau
87 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Problem Feststellung wann Konvertieren beendet 'lame.exe

  Alt 27. Aug 2008, 14:30
Naja, ich habe die dll jetzt nicht genutzt und bin bei der lame.exe geblieben. Der Tipp mit dem CreateProcess hat mir sehr geholfen.

Ich habe den Code wie folgt abgeändert und nun funktioniert es:

Delphi-Quellcode:
  (* Anhang anhängen *)
  procedure TMailForm.AnhangAdd(Dir: String);
    var sSource, sDest: TFileStream;
        DestName, DestName2, t, lame, mp3: String;
        StartupInfo: TStartupInfo;
        ProcessInfo: TProcessInformation;
        Result: Boolean;
    begin

      ShowBusy(True);

      if ExtractFileExt(Dir) = '.wavthen
        begin

          try
            DestName := ChangeFileExt(Dir, '.mp3');
            DestName := tempdir + ExtractFileName(DestName);

            lame := progdir + 'lame.exe';
            mp3 := '"' + Dir + '" "' + DestName + '"';

            FillChar (StartupInfo, SizeOf (TStartupInfo), 0);
            StartupInfo.cb := Sizeof (TStartupInfo);

            StartupInfo.dwFlags := STARTF_USESHOWWINDOW OR STARTF_USEPOSITION OR STARTF_USESIZE ;
            StartupInfo.wShowWindow := SW_Hide;

            Result := CreateProcess (
                        nil,
                        PChar(lame + ' ' + mp3),
                        nil,
                        nil,
                        False,
                        NORMAL_PRIORITY_CLASS,
                        nil,
                        nil,
                        StartupInfo,
                        ProcessInfo
                        );

          If Result then
            WaitForSingleObject (ProcessInfo.hProcess, INFINITE);

          if ProcessInfo.hProcess <> 0 then
            CloseHandle (ProcessInfo.hProcess);

            except
              MessageDlg('Fehler beim Umwandeln der Aufnahme. Anhängen fehlgeschlagen!',
                          mtError, [mbOk], 0);
            end; // try1


            try // try 2
              sSource := TFileStream.Create(DestName, fmOpenRead+fmShareDenyNone);
              sDest := TFileStream.Create(DestName + '.enc', fmCreate);


              with TEncryption.Create(encpw, 0, defCryptBufSize) do
                begin

                  if EncryptStream(sSource,sDest) then // if 3
                    begin
                    Dir := DestName + '.enc';
                    end
                  else
                    MessageDlg('Fehler beim Verschlüsseln!', mtError, [mbOk], 0);

                  Free;
              end; // with

            finally
              sSource.Free;
              sDest.Free;
              AnhangOpenDlg.FileName := '';
            end; // try 2
Vielen Dank


MfG,
Franz
Franz
  Mit Zitat antworten Zitat