![]() |
Ist Anwendung noch aktiv
Hallo ich habe ein Programm geschrieben, dass die Kommunikationsordner zweier anderen Programme kontrolliert
es werden laufend von Prog. 1 Dateien in Ordner 1 gestellt und von Prog.2 dort abgeholt. Mein Programm kontrolliert ob die Dateien nicht zu lange im Ordner bleiben. - so weit so gut jetzt mein Problem was passiert wenn Prog.1 sich aufhängt ? Wie kann ich feststellen ob die beiden Progr.noch laufen und wie kann ich dann die Prozesse abschießen ? :cry: Danke im Voraus Kosta[/b] |
Moin Kosta,
zur Überprüfung ob die Programme noch laufen, wäre die API Funktion SendMessageTimeout geeignet. Abschiessen kannst Du die Prozesse dann mittels TerminateProcess. Diese Funktion sollte aber nur in Notfällen angewandt werden, da eventuelle Aufräumarbeiten (z.b. Freigabe von Resourcen, wie Speicher oder Handles) nicht mehr durchgeführt werden. Schau Dir die Funktionen doch mal im PSDK an. Sind die Programme, die überwacht werden müssen auch eigene oder sind es Fremdprogramme? |
Zitat:
Dies wird auch vom PSDK mehr oder weniger bestätigt: Zitat:
|
Moin Luckie,
hast Du auch wieder recht. Ich hab's gerade mal nachgelesen. Aber zuraten tut er auch nicht gerade. ;-) Wie auch immer, beim aktuellen Problem spielt's zum Glück eh' keine Rolle. |
Zitat:
Man sollte nur im Programm selber nicht mehr benötigte Ressourcen freigeben, sonst schießt man sich gerade unter Win9x selber in den Fuß. @Dingsbums: Kuck mal unter OpenSource, da habe ich gerade ein Programm vorgestellt, welches alle laufenden Prozesse auflistet. (Geht auch unter Consumer Windows, nur wird da bei den Modulen Müll ausgegeben - mehr oder weniger. Wenn du es also unter Win9x brauchst, nimm die Abfrage im Hauptprogramm raus. Das mit den Prozessen geht auch unter Win9x.) |
Hi Chris
Danke für deinen Tip Blos wie soll ich das machen mit SendMessageTimeout kannst du mir ein kleine Beispiel erstellen lt. Delphi-Hilfe muß ich SendMessageTimeout( HWND hWnd, // handle of destination window UINT Msg, // message to send WPARAM wParam, // first message parameter LPARAM lParam, // second message parameter UINT fuFlags, // how to send the message UINT uTimeout, // time-out duration LPDWORD lpdwResult // return value for synchronous call ); das alles übergeben woher bekomm ich das alles wenn ich nur weiß dass das Programm Prog.exe heißt ? :cry: |
Wenn du nur den Namen der Exe kennst, dann ist es über einen SnapShot und Terminateprocess am einfachsten. Es sei denn du kennst Fensterklasse und Titel des Hauptfensters der Anwendung.
Sag uns mal, was du hast oder rausbekommen könntest, dann können wir dir weiterhelfen. |
Ich habe den Namen der EXE-Datei (lt.Taskmanager / Prozesse)
bzw. der Text der ebenfalls im Taskmanager unter Anwendungen steht. somit denke ich mir dass ich eine Funktion bastle, die dann wie folgt aussieht Funktion AplAktiv(ProzessName:String) : boolean; begin wass soll ich hier reinschreiben ? end; Procedure KillApl(ProzessName : string); begin was muß hier stehen end; Procedure TForm1.Button1Click(Sender : Tobject); Begin If AplAktiv('winword.exe') then // das soll nur true sein wenn Programm gestartet & reagiert alles ok else KillApl('winword.exe'); ich weiß für euch ist das sicher ein klax - aber ich konnte nirgends etwas finden. noch besser wäre eine Funktion die mir folgende Informationen gibt 1) Prog. läuft 2) Prog. reagiert nicht 3) Prog. nicht gestartet :oops: Kosta |
Moin Kosta,
dazu noch mal ein paar Fragen: Müssen eigene Programme überwacht werden? Ist bekannt wo die Programme liegen (Pfad)? Werden die Programme von Deinem Programm aus gestartet? Ein allgemeiner Tip noch: Die Hilfe zur Windows API, die bei Delphi mitgeliefert wird (ich hab' selber ja auch D5 Pro) ist, gelinde gesagt, museumsreif. ;-) Besorg' Dir am Besten mal das aktuelle MS PSDK. ( ![]() Sind, vollständig, allerdings so 350 MB, also nicht gerade ISDN tauglich. Man kann aber auch weniger herunterladen. Wie ich gerade gesehen habe ist Oktober 2002 die aktuelle Version. |
Hallo Christian!
Zitat:
Ansonsten ist D5 ja schon älter und damit auch die API-Hilfe. Gruß Dietmar Brüggendiek |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 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-2025 by Thomas Breitkreuz