Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dos-Konsole über ein Delphi Programm Buttonklick schließen? (https://www.delphipraxis.net/41568-dos-konsole-ueber-ein-delphi-programm-buttonklick-schliessen.html)

mlspider 5. Mär 2005 12:12


Dos-Konsole über ein Delphi Programm Buttonklick schließen?
 
Hallo,

mal eine ganz banale Frage. Wie kann ich die CMD über ein Delphiprogramm per Buttonklick schließen.

Habe es wie folgt versucht:

Delphi-Quellcode:
shellExecute(0, 'CLOSE', 'cmd.exe',nil,0,0);
Leider ohne Erfolg!

Achso, geöffnet wurde diese wie folgt:

Delphi-Quellcode:
shellExecute(0, 'open', 'Record\proxy.exe',PChar(edit2.text), nil, sw_show);
wobei proxy.exe das auszuführende Konsolenprogramm ist und Edit2.text die Parameter enthält.


Oder anders augedrückt: wie kann man die Tastenkombiantion "STRG + C" an das geöffnete Konolenfenster übergeben?"

Meflin 5. Mär 2005 20:03

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

schonmal die suche auspobiert ;)

Luckie hat da in der CodeLib was gepostet, dürfte dir helfen: http://www.delphipraxis.net/internal...rozess+beenden


Garfield 6. Mär 2005 11:47

Re: Dos-Konsole über ein Delphi Programm Buttonklick schließ
 
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:
Delphi-Quellcode:
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

Delphi-Quellcode:
StartupInfo.wShowWindow := SW_HIDE; // SW_SHOWNORMAL;
zum Beispiel angeben, ob das Konsolenfenster versteckt oder als normales Fenster angezeigt werden soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz