![]() |
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:
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.
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; Was mach ich falsch? Danke schonmal Padavan |
Re: Lame.exe mit Shellexecute aufrufen
hab jetzt noch rausbekommen, dass ich das ganze als einen String übergeben muss.
Delphi-Quellcode:
klappt aber auch nicht, in dem Fall öffnet sich nicht mal mehr das Fenster
shellexecute(Handle,'nil',PChar('C:\Giro\dl\Bass\lametest\lame.exe' + ' ' + Opendialog1.FileName + ' ' +
savedialog1.FileName),nil,nil,SW_SHOWNORMAL); 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);
|
Re: Lame.exe mit Shellexecute aufrufen
Hallo padavan,
bist du sicher, dass du nicht lieber das hier nimmst?
Delphi-Quellcode:
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.
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 ); Grüße vom marabu |
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: |
Re: Lame.exe mit Shellexecute aufrufen
Hm,
so geht´s jetzt nicht.....
Delphi-Quellcode:
Ruft die Lame.exe kurz auf, aber ohne Ergebnis
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; |
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:
Das war mit "doublequotes setzen" gemeint.
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; Hiermit werden Fehler umgangen die dadurch entstehen, dass ein Pfad Leerzeichen enthält. |
Re: Lame.exe mit Shellexecute aufrufen
Delphi-Quellcode:
Danke euch allen, so hat´s jetzt wunderbar geklappt!!!
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; |
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:
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:
usw. usf.
PChar(' "-h" + "'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'), // parameters
|
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:
marabu
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 // ... ); |
Re: Lame.exe mit Shellexecute aufrufen
Moin Padavan,
ausserdem schlägt dass hier
Delphi-Quellcode:
fehl.
PChar('"'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'+'.mp3')
Das +'.mp3' muss in die " mit eingeschlossen werden, da es zum Dateipfad gehört. |
Re: Lame.exe mit Shellexecute aufrufen
Mensch vielen dank.
So ist es ordentlich. Man kann sich vorher irgendwas zusammenbasteln "Params" und dann übergeben. Das hätte ich schon wieder umständlicher gelöst, weil ich darauf nicht kam: Params := Params + "irgendwas" Vielen Dank nochmal auch für die Geduld @Christian Zitat:
|
Re: Lame.exe mit Shellexecute aufrufen
Moin padavan,
wird dieser Abschnitt denn überhaupt ausgeführt? Wenn Du z.B. .mp3 als DefaultExtension angibst, wird sie automatisch angehängt, wenn bei der Dateiauswahl keine registrierte Endung angegeben wird. |
Re: Lame.exe mit Shellexecute aufrufen
naja,
ich habe beides Varianten ausprobiert. Einmal habe ich .mp3 selbst im Savedialog reingeschrieben und einmal nicht. Beides mal kommt eine Dateit mit der Endung .mp3 raus.... |
Re: Lame.exe mit Shellexecute aufrufen
Vielleicht hilft RazorLame. Benutzt auch Lame.exe und ist in Delphi geschriebene OpenSource.
![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr. |
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