AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ShellExecute funktiomert nicht richtg mit Parameterangabe
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute funktiomert nicht richtg mit Parameterangabe

Ein Thema von aramintaros · begonnen am 7. Mai 2009 · letzter Beitrag vom 8. Mai 2009
Antwort Antwort
aramintaros

Registriert seit: 14. Mai 2008
48 Beiträge
 
#1

ShellExecute funktiomert nicht richtg mit Parameterangabe

  Alt 7. Mai 2009, 20:38
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:
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.
Wenn mir da auf die Sprünge geholfen werden kann, bin ich sehr dankbar, ich beiß mir schon seit Stunden die Zähne aus.
Da ich kein Profi bin und manchmal die Hilfe nicht richtig verstehe , 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?
Gruß und Danke ara 8)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 7. Mai 2009, 20:41
Die Parameter des aufzurufenden Programms gehören in den 4. Parameter von ShellExecute, steht auch so in der Hilfe.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 7. Mai 2009, 21:59
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).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
aramintaros

Registriert seit: 14. Mai 2008
48 Beiträge
 
#4

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 04:20
Zitat von DeddyH:
Die Parameter des aufzurufenden Programms gehören in den 4. Parameter von ShellExecute, steht auch so in der Hilfe.
Hallo DeddyH,
erst einmal Danke für den Hinweis, habe dann durch ausprobieren folgenden Code der ohne Fehlemeldung klappt.

Delphi-Quellcode:
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.
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?
z.B.

Delphi-Quellcode:
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.
Jedenfalls verstehe ich das so. Par 6(CmdShow Konstanten) ist schon klar, der ist nicht schwer wobei ich das zentrieren des Fensters vermisse
Thx und schönes WE ara
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 04:23
Zitat von aramintaros:
Wo kann ich eine verständliche Auflistung oder Erklärung finden was die Parameter bedeuten, oder kannst du mir erklären wie Sie zu verstehen sind?
Erstens geben dir schon die Namen der Parameter, die dir Delphi ja anzeigt, einen gewissen Fingerzeig, zweitens wie wäre es mit der Dokumentation...
http://lmgtfy.com/?q=shellexecute
http://msdn.microsoft.com/en-us/library/bb762153.aspx
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
aramintaros

Registriert seit: 14. Mai 2008
48 Beiträge
 
#6

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 04:47
Zitat von jaenicke:
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).
Grüss dich jaenicke,

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:
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;
Ich gestehe daß ich nicht genau weiss was du in diesem Fall mit dem Arbeitsverzeichnis(Workdir) meinst
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 , 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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 05:36
Die MSDN Hilfe erklärt doch eigentlich jeden Parameter sehr genau.

Was ich mit den Anführungszeichen meinte ist, dass ein Leerzeichen im Pfad sonst nicht funktioniert:  ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', '--load C:\Testordner XY\test.avi', nil, SW_SHOW); 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); 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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
aramintaros

Registriert seit: 14. Mai 2008
48 Beiträge
 
#8

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 08:59
Zitat von jaenicke:
Die MSDN Hilfe erklärt doch eigentlich jeden Parameter sehr genau.
.....................Das ist alles 1) english und 2) viel für VB + C. Ich finde da keine passenden Beispiele

Zitat von jaenicke:
Was ich mit den Anführungszeichen meinte ist, dass ein Leerzeichen im Pfad sonst nicht funktioniert:  ShellExecute(Handle, nil, 'C:\Avidemux\run.exe', '--load C:\Testordner XY\test.avi', nil, SW_SHOW); 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);
.....................Diese Erklärung ist sehr gut, das mit den Anführungszeichen habe ich schon in anderen Beiträgen gesehen, wusste aber nicht was damit wohl gemeint ist. Nun habe ich es richtig mitgekriegt.


Zitat von jaenicke:
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.
.....................Das einzige Verzeichnis was fest ist, ist das Avidemux-Verzeichniss. Das Verzeichnis zum Einlesen als auch dem Speichern der Audio-Video-Dateien sollen frei wählbar sein

.....................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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 12:17
Zitat von aramintaros:
Das ist alles 1) english und 2) viel für VB + C.
Dass es auf Englisch ist, ist klar. Ohne Englisch kommt man als Programmierer auch nicht allzuweit außer mal ein paar kleine Hobbyprogramme.
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
aramintaros

Registriert seit: 14. Mai 2008
48 Beiträge
 
#10

Re: ShellExecute funktiomert nicht richtg mit Parameterangab

  Alt 8. Mai 2009, 23:30
Zitat von jaenicke:
Zitat von aramintaros:
Das ist alles 1) english und 2) viel für VB + C.
Dass es auf Englisch ist, ist klar. Ohne Englisch kommt man als Programmierer auch nicht allzuweit außer mal ein paar kleine Hobbyprogramme.
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.
....................Das mit der englische Sprache geht ja, ich komme aus der IT-Branche, aber das Umsetzen von C + VB fällt mir sehr schwer.
....................Es ist klar, daß ohne Englisch nichts los ist, in der Elektronik ist sehr ähnlich.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:04 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