Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Lame.exe mit Shellexecute aufrufen (https://www.delphipraxis.net/57556-lame-exe-mit-shellexecute-aufrufen.html)

padavan 23. Nov 2005 10:14


Lame.exe mit Shellexecute aufrufen
 
Hallo Leute,
kann mir jemand konkret sagen, was ich hierbei falsch mache?
Hab die Lame.exe in einem Ordner und ein .Wav. Mit CMD und dem Aufruf
"lame.exe quelllied.wav Zielied.mp3" (guter alter DOS-Stil)
erhalte ich ein konvertiertes MP3-Liedchen.

Mit Delphi bekomm ich´s nicht gebacken.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Opendialog1.Execute then
    if savedialog1.Execute then
//      shellexecute(Handle,'open',PChar('C:\Giro\dl\Bass\lametest\lame.exe'),Pchar(SaveDialog1.Filename),Pchar(SaveDialog1.Filename),SW_SHOWNORMAL);
        shellexecute(Handle, nil, PChar('C:\Giro\dl\Bass\lametest\lame.exe'),Pchar(SaveDialog1.Filename),Pchar
(SaveDialog1.Filename),SW_SHOWNORMAL);
end;
Die auskommentierte Zeile war der erste Versuch, beides öffnet die Lame.exe (äußert sich durch ein aufblitzen des Kommandezeilenfensters), aber offensichtlich werden die Parameter nicht richtig übergeben.
Was mach ich falsch?

Danke schonmal
Padavan

padavan 23. Nov 2005 10:52

Re: Lame.exe mit Shellexecute aufrufen
 
hab jetzt noch rausbekommen, dass ich das ganze als einen String übergeben muss.

Delphi-Quellcode:
shellexecute(Handle,'nil',PChar('C:\Giro\dl\Bass\lametest\lame.exe' + ' ' + Opendialog1.FileName + ' ' + 
savedialog1.FileName),nil,nil,SW_SHOWNORMAL);
klappt aber auch nicht, in dem Fall öffnet sich nicht mal mehr das Fenster

Vergesst es, ich hab´s - sorry
Vielleicht nützt´s nochmal jemandem
Delphi-Quellcode:
      shellexecute(Handle,'open',PChar('C:\Giro\dl\Bass\lametest\lame.exe'),Pchar(OpenDialog1.Filename),Pchar(SaveDialog1.Filename),SW_SHOWNORMAL);

marabu 23. Nov 2005 11:11

Re: Lame.exe mit Shellexecute aufrufen
 
Hallo padavan,

bist du sicher, dass du nicht lieber das hier nimmst?

Delphi-Quellcode:
ShellExecute(
  Handle,
  'open', // shell verb
  PChar('C:\Giro\dl\Bass\lametest\lame.exe'), // command
  PChar(OpenDialog1.Filename + ' ' + SaveDialog1.Filename), // parameters
  nil, // working directory
  SW_SHOWNORMAL
);
In deinem Code hast du den Ausgabenamen als Arbeitsverzeichnis übergeben und den eigentlichen Ausgabenamen dadurch garnicht spezifiziert. Eventuell macht LAME in diesem Fall eine inplace Konvertierung. Außerdem musst du die übergebenen Dateinamen vielleicht noch in doublequotes setzen, wenn Leerstellen drin vorkommen.

Grüße vom marabu

padavan 23. Nov 2005 11:36

Re: Lame.exe mit Shellexecute aufrufen
 
Hi marabu,

das mit den Leerstellen hatte ich gar nicht probiert, geht natürlich nicht, haste recht - Mist.
Aber der alternative Code, welchen du eben nochmal wiederholt hast, der funktionierte gar nicht, wollte es ja so machen.
EDIT: ach sorry, ich muss erstmal richtig lesen, hast nicht´s wiederholt, sonder korrigert, werd´s gleich prüfen

inplace Konvertierung :gruebel:
doublequotes setzen :gruebel:

was heißt das? :oops:

padavan 23. Nov 2005 11:42

Re: Lame.exe mit Shellexecute aufrufen
 
Hm,
so geht´s jetzt nicht.....

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if opendialog1.Execute then begin
    if savedialog1.Execute then begin
      ShellExecute(
        Handle,
        'open', // shell verb
        PChar('C:\Giro\dl\Bass\lametest\lame.exe'), // command
        PChar(OpenDialog1.Filename + ' ' + SaveDialog1.Filename), // parameters
        nil, // working directory
        SW_SHOWNORMAL
      );
    end;
  end;
end;
Ruft die Lame.exe kurz auf, aber ohne Ergebnis

Christian Seehase 23. Nov 2005 12:01

Re: Lame.exe mit Shellexecute aufrufen
 
Moin padavan,

ich weiss ja jetzt nicht, wo die Dateien liegen, die Du in Open-/SaveDialog auswählst, aber zur Sicherheit solltest Du es so schreiben:

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if opendialog1.Execute then begin
    if savedialog1.Execute then begin
      ShellExecute(
        Handle,
        'open', // shell verb
        PChar('C:\Giro\dl\Bass\lametest\lame.exe'), // command
        PChar([color=red]'"'[/color]+OpenDialog1.Filename + [color=red]'" "'[/color] + SaveDialog1.Filename+[color=red]'"'[/color]), // parameters
        nil, // working directory
        SW_SHOWNORMAL
      );
    end;
  end;
end;
Das war mit "doublequotes setzen" gemeint.
Hiermit werden Fehler umgangen die dadurch entstehen, dass ein Pfad Leerzeichen enthält.

padavan 23. Nov 2005 12:05

Re: Lame.exe mit Shellexecute aufrufen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    Progdir: string;
begin
  ProgDir := ExtractFilePath(ParamStr(0));
  if opendialog1.Execute then begin
    if savedialog1.Execute then begin
      ShellExecute( 
        Handle,
        'open', // shell verb
        PChar(Progdir + '\' + 'lame.exe'), // command
        PChar('"'+OpenDialog1.Filename + '" "' + SaveDialog1.Filename+'"'+'.mp3'), // parameters
        nil, // working directory
        SW_SHOWNORMAL
      );
    end;
  end;
end;
Danke euch allen, so hat´s jetzt wunderbar geklappt!!!

padavan 23. Nov 2005 13:23

Re: Lame.exe mit Shellexecute aufrufen
 
ich glaub ich habe mich zu früh gefreut.

Hier der Quellcode-Schnipsel wie ich es tatsächlich verwenden wollte. Der Vollständigkeit halber.

Delphi-Quellcode:
procedure TForm1.AbColBitBtn_EncodeClick(Sender: TObject);
begin
  AbColBitBtn_Extras.Checked := false;
  Timer_extraanimation.Enabled := true;

  if fileexists(Progdir + '\' + 'lame.exe') then begin
    if opendialog1.Execute then begin
      if SaveDialog_Enc.Execute then begin
        if extractfileext(savedialog_Enc.FileName) = '.mp3' then begin
          ShellExecute(
            Handle,
            'open', // shell verb
            PChar(Progdir + '\' + 'lame.exe'), // command
            PChar('"'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'), // parameters
            nil, // working directory
            SW_SHOWNORMAL
          );
        end else begin
          ShellExecute(
            Handle,
            'open', // shell verb
            PChar(Progdir + '\' + 'lame.exe'), // command
            PChar('"'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'+'.mp3'), // parameters
            nil, // working directory
            SW_SHOWNORMAL
          );
        end;
      end;
    end;
  end else showmessage('Missing "lame.exe" .... The lame.exe has to be in the same direoctory than the Dreamplayer.exe');
end;

So, geht auch, aber:
Mann kann ja noch weitere Parameter übergeben, z.B. sowas:
Zitat:

Fixed bit rate jstereo 128kbps encoding, high quality (recommended):
lame -h sample.wav sample.mp3


Average bit rate 112kbps encoding:
lame --abr 112 sample.wav sample.mp3
Als ich das auch noch reinpflicken wollte, habe ich gemerkt, dass ich obigen Quellcode mal wieder nicht verstanden habe.
So wollte ich es versuchen.
(zwei Versuche von vielen die nicht funktioniert haben)

Delphi-Quellcode:
PChar(' "+'-h+'"  "'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'), // parameters
Delphi-Quellcode:
PChar(' "-h" +   "'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'), // parameters
usw. usf.

marabu 23. Nov 2005 13:49

Re: Lame.exe mit Shellexecute aufrufen
 
Das Plus-Zeichen hinter dem -h willst du doch nicht übergeben - hier noch mal eine andere Vorgehensweise, vielleicht etwas übersichtlicher:

Delphi-Quellcode:
var
  params: string;
begin
  params := '';
  if OptionHighQuality then
    params := params + ' -h';
  // ... weitere Optionen
  params := params + ' "' + OpenDialog1.FileName + '"';
  params := params + ' "' + SaveDialog_Enc.FileName + '"';
  // ...
  ShellExecute(
    // ...
    PChar(params), // parameters
    // ...
  );
marabu

Christian Seehase 23. Nov 2005 13:58

Re: Lame.exe mit Shellexecute aufrufen
 
Moin Padavan,

ausserdem schlägt dass hier

Delphi-Quellcode:
PChar('"'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'+'.mp3')
fehl.
Das +'.mp3' muss in die " mit eingeschlossen werden, da es zum Dateipfad gehört.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz