Entwickler-Ecke

Dateizugriff - BAT Datei ausführen und aufs Ende warten


chris_davidi - Mi 17.09.03 10:48
Titel: BAT Datei ausführen und aufs Ende warten
Hallo...

Habe immernoch folgendes Problem. Ich habe eine BAT- Datei welche ausgeführt werden soll... Wenn alles durchgelaufen ist, wird ein Druck einer beliebiger Datei benötigt. Danach soll sich das Ende schließen.

Meine Frage, wie kann ich es unter Delphi schaffen, das meine BAT- Datei gestartet wird, am Ende der Druck irgendeiner Taste passiert und es sich am Ende schließt, dass Fenster.

Habe mit einigen Sachen rumprobiert... Bin aber noch immer auf keine Lösung gekommen.

Hat jemand von euch einen Rat? Oder einen Code...? Bin echt hilfslos... :(

Vielen Dank im Vorraus
Gruss Chris

Moderiert von user profile iconTino: Titel geändert & Topic verschoben.


Delete - Mi 17.09.03 11:12

Starte den Kommandointerpreter mit deiner Batch-Datei als Parameter mit ShellexecuteEx oder CreateProcess. Dann bekommst du Prozess-Handle welches du WaitForSingleObject übergeben kannst und warten bis der Prozess beendet ist. Code dazu gibt es in den FAQ.


chris_davidi - Mi 17.09.03 11:27

Was ist ein Kommandointerpreter? Wie geht das? Kannst du mir den Code dazu machen, oder einen Link geben, wo das genauer erklärt wird? Habe es in der FAQ nicht gefunden... :(


Delete - Mi 17.09.03 11:34

Unter Windows9x heißt er command.com und unter NTff. cmd.com. Deswegen hab eich allgemein Kommandointerpreter geschrieben.


chris_davidi - Mi 17.09.03 12:34

Ok...

Mit


Delphi-Quelltext
1:
ShellExecute(Application.Handle, 'open''command.com'nilnil, SW_SHOW);                    


Kann ich den Kommandointerpreter ja dann starten, aber wie übergebe ich es, dass er meine Batch-Datei startet? Und wie erhalte ich dann das Fenster Handle? Kannst du mir da auch helfen? Wäre nett. :)


Delete - Mi 17.09.03 12:40

Ich habe gesagt ShellexecuteEX oder CreateProcess. Beide haben eine Parameterliste und zu beiden gibt es in den FAQ ein Beispiel.


chris_davidi - Mi 17.09.03 12:53

Über ShellexecuteEX steht nichts in der FAQ. Darum meinte ich, dass du ShellExecute meinst.

Oder meintest du diesen Beitrag der FAQ?
http://www.delphi-forum.de/viewtopic.php?t=2887

Werde aus dem leider gar nicht schlau...


Delete - Mi 17.09.03 13:00

Das zum Beispiel:
http://www.delphi-forum.de/viewtopic.php?t=15943


chris_davidi - Mi 17.09.03 13:08

Und wie öffne binde ich CreateProcess dann ein, also zum Beispiel nach einem ButtonClick?


Delphi-Quelltext
1:
CreateProcess('test.bat');                    


Wie lautet der Code dazu, CreateProcess anzuwenden?


Delete - Mi 17.09.03 13:14

Könnte mal bitte jemand übernehmen? Ich gebe auf.


Delete - Mi 17.09.03 14:00

Ich übernehme ... *zur Stelle eilt* ... @chris_davidi: Am einfachsten kommst du weg, indem du dir mal die vorhandenen Beispiele anschaust. Ich war mal so nett, dir ein Beispiel rauszusuchen, dass du dir bitte ansiehst und dann 1:1 kopieren kannst:

Programme starten ohne ShellExecute [http://www.delphipraxis.net/topic1033_programm+starten+ohne+shellexecute.html] (DP)

Beim nächsten Mal bitte etwas mehr Eigeninitiative, sonst bin ich der Erste (oder vielleicht der Nächste ...), der deine Fragen künftig ignorieren wird.


Tino - Mi 17.09.03 14:06

chris_davidi hat folgendes geschrieben:
Wie lautet der Code dazu, CreateProcess anzuwenden?

Den Link [http://www.delphi-forum.de/viewtopic.php?t=15943] den Luckie gepostet hat zeigt dir eine Funktion die du so aufrufen kannst:

Delphi-Quelltext
1:
RunProcessAndWait ('test.bat');                    

Gruß
Tino


Licki - Mi 17.09.03 17:22

Ja, chris_davidi, das ist eigentlich relativ einfach. Eine Datei auszuführen und warten lassen, bis diese beendet ist und danach die nächste zu starten. Dafür gibt es einige Funktionen, viele sind davon im Netz zu finden, wenn du welche brauchst, PM an mich. ;)

Aber meiner Meinung nach ist das ja nicht sein Problem, das Problem liegt denke ich laut seiner Aussage daran, die Batch-Datei zu schließen nachdem alles abgelaufen ist? Wie Lucki sagt, mit einem Fenster-Handle. Persönlich weiß ich leider nicht wie das geht (die Logik ist aber klar), würde mich aber selbst auch interessieren.