Hallo, ich benutze für die Ausführung von Consolenprogrammen CreateProcess:
Starten:
Delphi-Quellcode:
var
ProcessPriority : integer;
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
...
CreateProcess(
nil,
PChar(CommandLine),
nil,
nil,
True,
ProcessPriority,
nil,
nil,
StartupInfo,
ProcessInfo);
Da CreateProcess eine Funktion ist, bekommt man einen boolschen Wert zurück, den man auswerten kann. Zum Beispiel, wenn man die Ausgabe per Pipes in ein Memo umleiten will.
Durch ProcessInfo hast Du das
Handle auf den Prozess und kannst ihn so abbrechen:
TerminateProcess (ProcessInfo.hProcess, 0);
Anschließend wird der Prozess geschlossen:
Delphi-Quellcode:
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
Die Variable ProcessInfo muss so deklariert werden, dass die Procedure/Function zum Erstellen und Abbrechen darauf zugreifen können.
Für die ProcessPriority verwende ich zum Beispiel folgende Werte:
Win2000/XP
IDLE_PRIORITY_CLASS = $40;
BELOW_NORMAL_PRIORITY_CLASS = $4000;
NORMAL_PRIORITY_CLASS = $20;
ABOVE_NORMAL_PRIORITY_CLASS = $8000;
HIGH_PRIORITY_CLASS = $80;
REALTIME_PRIORITY_CLASS = $100;
Win9x/ME
IDLE_PRIORITY_CLASS = $40;
NORMAL_PRIORITY_CLASS = $20;
HIGH_PRIORITY_CLASS = $80;
REALTIME_PRIORITY_CLASS = $100;
Bei StartupInfo kann man mit
StartupInfo.wShowWindow := SW_HIDE; // SW_SHOWNORMAL;
zum Beispiel angeben, ob das Konsolenfenster versteckt oder als normales Fenster angezeigt werden soll.