Ich programmiere unter WinXP mit Delphi 6 und möchte einen DOS-Befehl, wie z.B. IPCONFIG von DELPHI aus starten und das Ergebnis z.B. in einem TMemo anzeigen. Ist das möglich? Wenn ja, wie?
Bin für jede Hilfe dankbar.
Dieter
Ich programmiere unter WinXP mit Delphi 6 und möchte einen DOS-Befehl, wie z.B. IPCONFIG von DELPHI aus starten und das Ergebnis z.B. in einem TMemo anzeigen. Ist das möglich? Wenn ja, wie?
Bin für jede Hilfe dankbar.
Dieter
Hi Dieter,
Ich programmiere unter WinXP mit Delphi 6 und möchte einen
DOS-Befehl, wie z.B. IPCONFIG von DELPHI aus starten und das
Ergebnis z.B. in einem TMemo anzeigen. Ist das möglich? Wenn
ja, wie?
Alles was Du dazu brauchst ist die WinApi-Funktion ‚ShellExecute‘. Du führst innerhalb des Programms den Befehl z.B. ‚ipconfig /all >ipconfig.txt‘ aus (häng das aktuelle Programmverzeichnis an den Dateinamen, damit die Datei dann im selben Verzeichnis ist) und wartest, bis es beendet ist. Danach liest Du die Text-Datei ‚ipconfig.txt‘ in dein TMemo ein. Ein Beispiel wie Du ein Programm ausführst und auf dessen Beendigung wartest findest Du hier: http://delphi.about.com/od/windowsshellapi/l/aa08249… (etwas weiter unten).
Schönen Gruß,
Rudy
Hallo Rudy,
Alles was Du dazu brauchst ist die WinApi-Funktion
‚ShellExecute‘. Du führst innerhalb des Programms den Befehl
z.B. ‚ipconfig /all >ipconfig.txt‘ aus (häng das aktuelle
Programmverzeichnis an den Dateinamen, damit die Datei dann im
selben Verzeichnis ist) und wartest, bis es beendet ist.
das funktioniert so zwar nicht, weil die Funktion ShellExecute Dateien startet, deren Datei-Endung unter Windows registriert sind und Windows verständlicherweise dann kein Programm findet, das z.B. mit dem Namen ipconfig oder dir oder was auch immer für ein DOS-Kommando kommen könnte, verknüpft ist. Aber Dein Hinweis hat mich auf eine funktionierende Lösung gebracht, auch wenn sie vielleicht in den Augen mancher Programmierer nicht sehr elegant ist:
Ich erzeuge eine temporäre *.bat -Datei, in die ich das Kommando so schreibe, wie Du angegeben hast. Hierbei sollte man noch beachten, dass man den Dateinamen zusammen mit dem Pfad in Anführungszeichen setzt, da es sonst nicht richtig funktioniert, wenn im Pfad Leerzeichen vorkommen. also z.B.:
'ipconfig /all \>"' + TempPath + '\~dosausgabe.txt"'
Die bat -Datei starte ich dann mit ShellExecute , das funkitoniert gut, da diese Dateiendung mit dem DOS-Kommandointerpreter verknüpft ist.
Danach liest Du die Text-Datei ‚ipconfig.txt‘ in dein TMemo
ein. Ein Beispiel wie Du ein Programm ausführst und auf dessen
Beendigung wartest findest Du hier:
http://delphi.about.com/od/windowsshellapi/l/aa08249…
Der Rest funktioniert einwandfrei, vielen Dank für Deine Hilfe!
Gruß Dieter
Hi Dieter,
Seltsam, ipconfig ist nämlich eine .exe-Datei im System32-Verzeichnis, und kein x-beliebiger Dos-Befehl wie ‚cd‘, ‚dir‘ etc. Aber stimmt, ein Test ergibt, dass ein direkter Aufruf samt pfad zu ipconfig über ‚Ausführen‘ mit
C:\Windows\system32\ipconfig.exe /all \> C:\temp\ipconfig.txt
die Ausgabe nicht erzeugt, ipconfig scheint also nur in der Konsole zu laufen. Du kannst dann den Befehl immer noch über die Konsole cmd.exe selbst ausführen, das muss funktionieren:
C:\Windows\system32\cmd.exe /c ipconfig /all \> C:\temp\ipconfig.txt
So geht es auch über Ausführen, den Windows-Pfad kannst Du über die Umgebungsvariable %SYSTEMROOT% oder aus der Registrierung holen. Theoretisch könnte man auch einen Befehl wie ‚dir‘ in eine Text-Datei über cmd ausühren. Der Parameter /c bewirkt, dass CMD.exe danach schließt (siehe cmd /?). Die Batch-Datei wird dadurch überflüssig.
Am Ende bleibt die Hauptsache, dass das Programm seinen Dienst tut - bei der Lösungsfindung bist Du ja nicht unbedarft
Schönen Gruß,
Rudy