Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kommandozeilenprogramm aus Delphi heraus starten (https://www.delphipraxis.net/72048-kommandozeilenprogramm-aus-delphi-heraus-starten.html)

benst 24. Jun 2006 15:28


Kommandozeilenprogramm aus Delphi heraus starten
 
Hi,

ich möchte ein anderes Programm (Kommandozeilen-Programm - ImageMagick) aus Delphi heraus starten:
Beispiel: convert 01.jpg 02.jpg all.pdf
Dazu einige Fragen:
- Wie mache ich das am besten? Soll ich dafür ShellExecute verwenden?
- In der Eingabeauforderung von Windowskann man maximal ca. 255 Zeichen eingeben (so weit ich weiß), wie kann ich das umgehen, wenn ich mehr Parameter übergeben möchte?

Gruß
Ben

marabu 24. Jun 2006 17:21

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Hi Ben,

kannst ruhig ShellExecute() oder seinen jüngeren Bruder ShellExecuteEx() verwenden. Irgendwelche Limits des Tastaturpuffers müssen dich dabei nicht kümmern. Die CommandLine (Parameter) darf 32K einnehmen, aber Vorsicht: unter Win9X ist das Limit 1K. Viele Konsol-Programme unterstützen einen aus CP/M-Zeiten bekannten Trick, bei dem eine Liste von Dateinamen in einer Textdatei hinterlegt wird und dem Programm mit dem Schalter @ übergeben wird. CONVERT scheint diese Tugend nicht zu besitzen.

Grüße vom marabu

benst 24. Jun 2006 20:51

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Mein Versuch klappt nicht:
Ich möchte das gleiche bewirken, als wenn ich in der Eingabeaufforderung
convert e:\a.jpg e:\a.pdf schreibe.

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
OperationAlsPChar, DateiAlsPChar, ParameterAlsPChar, VerzeichnisAlsPChar : Array [0..79] of Char;
begin
(OperationAlsPChar,'open'), StrPCopy(DateiAlsPChar,'convert'),StrPCopy(ParameterAlsPChar,'e:\a.jpg e:\a.pdf'), StrPCopy(VerzeichnisAlsPChar,'e:'),0);
end;
Was mache ich falsch?
Danke
Gruß
Ben

Waldteufel 24. Jun 2006 20:56

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Hi. :hi:

Zitat:

Zitat von benst
Was mache ich falsch?

Wo rufst du in dem Code überhaupt ShellExecute auf? :gruebel:

So würd' ich's machen:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  ShellExecute(Handle, 'open', 'P:\fad\Zur\convert.exe', 'e:\a.jpg e:\a.pdf', 'e:', SW_SHOW);
end;
PS: Statt SW_SHOW kannst du auch SW_HIDE einsetzen, dann wird's nicht angezeigt.

benst 24. Jun 2006 21:13

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Sorry, ja natürlich... Habe das auch so. Aber beim Kopieren des Codes hierher ist es verloren gegangen. :)
Das Problem ist, dass das "Dos-Fenster" sofort wieder zu ist und ich keine Meldung lesen kann.
Wie kann ich das verhindern?
Gruß
Ben

Waldteufel 24. Jun 2006 21:15

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Zitat:

Zitat von benst
Wie kann ich das verhindern?

So:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  ShellExecute(Handle, 'open', 'cmd.exe', '/C "P:\fad\Zur\convert.exe e:\a.jpg e:\a.pdf && pause > nul"', 'e:', SW_SHOW);
end;

benst 24. Jun 2006 21:30

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Ich habe das Programm jetzt zum Laufen bekommen.
Ich musste den vollständig Programm-Pfad angeben. Aber warum? In der Eingabeaufforderung funktioniert es auch aus jedem Verzeichnis heraus, weil entsprechende Umgebungsvariablen gesetzt sind. ??

Das Fenster wird jedoch leider immer noch geschlossen - trotzdeiner Erweiterung.
Gruß
Ben

Martin K 24. Jun 2006 21:38

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Zitat:

Zitat von benst
Ich habe das Programm jetzt zum Laufen bekommen.
Ich musste den vollständig Programm-Pfad angeben. Aber warum? In der Eingabeaufforderung funktioniert es auch aus jedem Verzeichnis heraus, weil entsprechende Umgebungsvariablen gesetzt sind. ??

Dann sollte es eigentlich auch so gehen - oder tut es das nicht?
Bei 'cmd.exe' ist ja auch nicht der volle Pfad angegeben.

benst 24. Jun 2006 21:42

Re: Kommandozeilenprogramm aus Delphi heraus starten
 
Funst alles prima.
Ich musste anstelle von /C /K schreiben.
Mit convert ohne Pfadangabe gibt es Probleme wenn ich mein Programm aus der Delphientwicklungsumgebung heraus starte, wenn ich es alleine starte funst es.
Vielen Dank
Ben


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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