Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Dos-Konsole über ein Delphi Programm Buttonklick schließ

  Alt 6. Mär 2005, 11:47
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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat