Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie ein Kommandozeilenprogramm ausführen? (https://www.delphipraxis.net/54982-wie-ein-kommandozeilenprogramm-ausfuehren.html)

Kinimod8 14. Okt 2005 14:13


Wie ein Kommandozeilenprogramm ausführen?
 
Hallo,

ich habe ein Kommandozeilenprogramm, dass .dbf-Dateien int .txt-Dateien umwandelt. Der Aufruf unter Windows ist ganz einfach (Start-Auführen-"cmd"-Programm mit Parametern ausführen), aber wie kann ich das Programm aus Delphi heraus aufrufen?

Die Syntax für mein Kommandozeilenprogramm ist
Code:
DBTAB xyz.dbf xyz.txt
Ich hoffe, ihr könnt mir helfen!
Dominik

PS: Mit diesem Code habe ich es schon probiert, geht aber nicht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  c, p: array[0..800] of Char;
begin
  StrPCopy(c, 'C:\DBTAB.exe');
  StrPCopy(p, 'DBTAB test.dbf test.txt');
  ShellExecute(Application.Handle, 'open', c, p, nil, SW_NORMAL);
end;

droppi 14. Okt 2005 14:23

Re: Wie ein Kommandozeilenprogramm ausführen?
 
also wenn du es wie ein programm in cmd ausführen willst gib einfach ein:
Delphi-Quellcode:
windows.WinExec(pchar('DBTAB xyz.dbf xyz.txt'),0);
wenn das nicht funktioniert musst du es nochmal mit shellexecute ausprobieren.
aber ich denk mal das müsste funzen

jim_raynor 14. Okt 2005 14:26

Re: Wie ein Kommandozeilenprogramm ausführen?
 
Schonmal versucht bei ShellExecute den Returncode auszuwerten? Dort findest du in der Regel nützliche Hinweise, warum es nicht geklappt hat. Vielleicht musst du aber auch das Verzeichniss für die Ein- und Ausgabedateien angeben oder das entsprechende Verzeichnis als Arbeitsverzeichnis (Parameter der jetzt bei dir auf nil steht) angeben.

himitsu 14. Okt 2005 14:29

Re: Wie ein Kommandozeilenprogramm ausführen?
 
lass mal das 'open' weg ... manchmal macht es mehr Probleme, als es nützt.

Delphi-Quellcode:
ShellExecute(Application.Handle, nil, PChar('C:\DBTAB.exe'), PChar('xyz.dbf xyz.txt'), nil, SW_NORMAL);
und dann hast du das Programm "DBTAB" auch nochmals im Parameter aufgerufen ;)

Ach ja droppi ... WinExec ... schmeiß das Ding weg, sowas sollte nicht mehr verwendet werden ... das sollte sogar in der OH drin stehen :warn:

Kinimod8 14. Okt 2005 14:37

Re: Wie ein Kommandozeilenprogramm ausführen?
 
Zitat:

Zitat von droppi
also wenn du es wie ein programm in cmd ausführen willst gib einfach ein:
Delphi-Quellcode:
windows.WinExec(pchar('DBTAB xyz.dbf xyz.txt'),0);
wenn das nicht funktioniert musst du es nochmal mit shellexecute ausprobieren.
aber ich denk mal das müsste funzen

Damit funktioniert es tatsächlich, aber die OH sagt auch, die Funktion wäre veraltet. Aber mit himitsus Methode funktioniert es dann wieder nicht.

himitsu 14. Okt 2005 14:43

Re: Wie ein Kommandozeilenprogramm ausführen?
 
und?
Delphi-Quellcode:
ShellExecute(0, nil, PChar('C:\DBTAB.exe'), PChar('"xyz.dbf" "xyz.txt"'), PChar('C:\'), SW_NORMAL);
Programm, Parameter und Arbeitsverzeichnis?
Und wenn ein Parameter Leerzeichen enthält, dann muß er natürlich in " eingrschlossen werden, aber das ist ja in der DOS-Box nicht anders ^^

Kinimod8 14. Okt 2005 14:52

Re: Wie ein Kommandozeilenprogramm ausführen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang mal ein Screenshot, wie ich das Programm aufrufe.

himitsu 14. Okt 2005 15:00

Re: Wie ein Kommandozeilenprogramm ausführen?
 
Das sollte dann so aussehn.

Delphi-Quellcode:
ShellExecute(0, nil, PChar('DBTAB'), PChar('test.dbf test.txt'), PChar('C:\Dominik\DBF2HTML'), SW_NORMAL);

Kinimod8 14. Okt 2005 15:06

Re: Wie ein Kommandozeilenprogramm ausführen?
 
Achso, jetzt habe ich's kapiert, danke! :thumb:


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