![]() |
ShellExecute funktiomert nicht richtg mit Parameterangabe
Hallo und Guten Abend,
ich habe einne Frage zu Delphi 2009. Wenn ich ShellExecute nur mit dem Programmname benutze funktioniert es, wenn ich die zum Programm dazugehörigen Parameter nehme hängt sich das auf. Es geht darum das Avidemux eine Videodatei mit einem Audiofile muxen soll. Der Befehl ist auf der Konsolenebene in Ordnung und klappt.
Delphi-Quellcode:
Wenn mir da auf die Sprünge geholfen werden kann, bin ich sehr dankbar, ich beiß mir schon seit Stunden die Zähne aus. :wall:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin {Geht nicht} ShellExecute(Handle, nil, 'C:\Avidemux\run.exe --load C:\testordner\test.avi --external-mp3 C:\testordner\laut.mp3 --save C:\testordner\laut.avi', nil, nil, SW_SHOW); {Geht} ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', nil, nil, SW_SHOW); end; end. Da ich kein Profi bin und manchmal die Hilfe nicht richtig verstehe :shock: , wäre ein Beispiel nicht nur hilfreich sonder auch lehrreich. Die Hilfe von Delphi ist teilweise sehr kryptysch für mich und wenn auf die MSDN-Seiten verwiesen wird kann ich die nicht umsetzen. :oops: Vielleicht gibt es da eine verständliche Beschreibung? Gruß und Danke ara 8) |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Die Parameter des aufzurufenden Programms gehören in den 4. Parameter von ShellExecute, steht auch so in der Hilfe.
|
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zudem kannst du auch das Arbeitsverzeichnis angeben, dann solltest du dir die Pfadangaben sparen können in den Parametern. (Auch wenn es sicherlich so besser ist, aber das kann als Parameter evtl. zu lang werden.)
Wenn du die kompletten Pfade angibst, darfst du jedenfalls die Anführungszeichen nicht vergessen (falls Leerzeichen im Pfad sind). |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zitat:
erst einmal Danke für den Hinweis, habe dann durch ausprobieren folgenden Code der ohne Fehlemeldung klappt.
Delphi-Quellcode:
Wo kann ich eine verständliche Auflistung oder Erklärung finden was die Parameter bedeuten und wie ich damit umgehe, oder kannst du mir erklären wie Sie zu verstehen sind?
procedure TForm2.Button1Click(Sender: TObject);
begin ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', '--load C:\Testordner\test.avi --external-mp3 C:\Testordner\laut.mp3 --save C:\Testordner\laut.avi', nil, SW_SHOW); end; end. z.B.
Delphi-Quellcode:
Jedenfalls verstehe ich das so. Par 6(CmdShow Konstanten) ist schon klar, der ist nicht schwer :) wobei ich das zentrieren des Fensters vermisse :shock:
procedure TForm2.Button1Click(Sender: TObject);
begin ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', '--load C:\Testordner\test.avi --external-mp3 C:\Testordner\laut.mp3 --save C:\..............,,,,,', nil, P 1 P 2 Parameter 3 Paramater 4 P 5 SW_SHOW); Par 6 end; end. Thx und schönes WE ara |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zitat:
![]() ![]() |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zitat:
Die festen Pfadangaben (als auch der Counter und Edit1) sind nur zu Testzwecken, die sollen nachher vom FileOpenDialog1(multiselect=true) an ShellExecute als eine Variable übergeben werden. So gibt es die Möglichkeit aus verschieden Ordnern unterschiedliche Files zusammen zu fügen, hoffe ich jedenfalls. :)
Delphi-Quellcode:
Ich gestehe daß ich nicht genau weiss was du in diesem Fall mit dem Arbeitsverzeichnis(Workdir) meinst :oops:
procedure TForm1.Button1Click(Sender: TObject);
var Filelist: TStringlist; Filecount,Counter : integer; begin Filelist:= TStringList.Create; if FileOpenDialog1.Execute then begin for Filecount := 0 to FileOpenDialog1.Files.Count - 1 do begin Filelist.AddStrings(FileOpenDialog1.Files); ListBox1.Items.Add(Filelist[Filecount]); StringGrid1.Cols[0].Add(Filelist[Filecount]); RzStringGrid1.Cols[0].Add(Filelist[Filecount]); end; end; Counter:= Counter + Filecount; Edit1.Text:= IntToStr(Counter); end; Kannst du mir ein Beispiel geben was das mit den Anführungszeichen auf sich hat? Habe meinen Text korregiert und dazu geschrieben: Da ich kein Profi bin und manchmal die Hilfe nicht richtig verstehe :wall:, wäre ein Beispiel nicht nur hilfreich sonder auch lehrreich. Die Hilfe von Delphi ist teilweise sehr kryptysch für mich und wenn auf die MSDN-Seiten verwiesen wird kann ich die nicht umsetzen. Vielleicht gibt es da eine verständliche Beschreibung? |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Die MSDN Hilfe erklärt doch eigentlich jeden Parameter sehr genau. :stupid:
Was ich mit den Anführungszeichen meinte ist, dass ein Leerzeichen im Pfad sonst nicht funktioniert:
Delphi-Quellcode:
In diesem Fall wäre XY\test.avi ein weiterer Parameter und nicht Teil des Dateinamens. Deshalb müsste das so aussehen:
ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', '--load C:\Testordner XY\test.avi', nil, SW_SHOW);
Delphi-Quellcode:
Das Arbeitsverzeichnis ist das Verzeichnis, in dem Dateien ohne Pfadangabe gesucht werden. Wenn das alles mit kompletten Pfaden klappt, dann ist das natürlich am besten. Leider funktionierte das zumindest mit älteren System nicht immer.
ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', '--load "C:\Testordner XY\test.avi"', nil, SW_SHOW);
|
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zitat:
Zitat:
Zitat:
.....................Ich danke erst einmal und habe schon den nächsten Stolperstein. Aber erst einmal werde ich selbst schauen und dann um Hilfe bitten wenn ich nicht weiterkomme. .....................Thx und Gruss ara |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zitat:
Ich meinte auch weniger Beispiele als die Erklärungen, die du dir ja notfalls mit Google übersetzen lassen kannst. Allerdings funktioniert das ja ähnlich wie in C oder so, nur die Syntax sieht halt anders aus. |
Re: ShellExecute funktiomert nicht richtg mit Parameterangab
Zitat:
....................Es ist klar, daß ohne Englisch nichts los ist, in der Elektronik ist sehr ähnlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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