![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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