AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Lame.exe mit Shellexecute aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Lame.exe mit Shellexecute aufrufen

Ein Thema von padavan · begonnen am 23. Nov 2005 · letzter Beitrag vom 23. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#1

Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 10:14
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
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 10:52
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
      shellexecute(Handle,'open',PChar('C:\Giro\dl\Bass\lametest\lame.exe'),Pchar(OpenDialog1.Filename),Pchar(SaveDialog1.Filename),SW_SHOWNORMAL);
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 11:11
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
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 11:36
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
doublequotes setzen

was heißt das?
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 11:42
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 12:01
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 12:05
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!!!
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 13:23
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) = '.mp3then 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)

PChar(' "+'-h+'" "'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'), // parameters PChar(' "-h" + "'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'), // parameters usw. usf.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 13:49
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Lame.exe mit Shellexecute aufrufen

  Alt 23. Nov 2005, 13:58
Moin Padavan,

ausserdem schlägt dass hier

PChar('"'+OpenDialog1.Filename + '" "' + SaveDialog_Enc.Filename+'"'+'.mp3') fehl.
Das +'.mp3' muss in die " mit eingeschlossen werden, da es zum Dateipfad gehört.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:20 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