Feststellen, ob ein Programm eingefrohren ist.
Es kann ja gut sein, dass eine Anwendung noch aktiv ist, diese aber nicht mehr reagiert, also eingefrohren ist.
Wie kann ich dies feststellen? |
Re: Feststellen, ob ein Programm eingefrohren ist.
Schicke mit SendMessageTimeOut WM_NULL ab das Fenster. Und wenn die Funktion mit dem Wert 0 zurückkehrt ist sie entweder fehlgeschlagen oder der TimeOut wurde überschritten. Jetzt musst du dir nur noch überlegen, ab wie viel Millisekunden du das Programm für abgestürzt erklärst. Windows verfährt übrigens ähnlich, wenn es im Taskmanager anzeigt: "Reagiert nicht mehr". Das heißt, dieser Zustand kann auch eintreten, wenn das Programm in einer längeren Schleife steckt und deshalb keine Nachrichten aus der Nachrichtenschlange abholen kann.
|
Re: Feststellen, ob ein Programm eingefrohren ist.
|
Re: Feststellen, ob ein Programm eingefrohren ist.
Klingt nett, ich würde aber meine Finger davon lassen:
Zitat:
|
Re: Feststellen, ob ein Programm eingefrohren ist.
Ich habe nun folgendes gemacht:
Delphi-Quellcode:
Die 5000 müssten ja 5 Milisekunden sein.. und Result lieft als Rückgabewert dann 0, sobald das Fenster nicht geöffnet ist, oder das Programm nicht reagier, richtig?
procedure Tfrm_main.StartButtonClick(Sender: TObject);
Var DWResult: DWORD; hWindowHandle: HWND; Result: integer; begin hWindowHandle := FindWindow('SphereSvr', 'SphereServer V0.56b-Nightly - MyShard (Running) '); Result := SendMessageTimeout(hWindowHandle, WM_NULL, 0, 0,SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult); end; Und wie kille ich dann den Prozess? //Edit: Die Funktion KillProzess funzt einwandrei: http://www.delphipraxis.net/internal...messagetimeout |
Re: Feststellen, ob ein Programm eingefrohren ist.
5000 sind 5 Sekunden. ;)
|
Re: Feststellen, ob ein Programm eingefrohren ist.
Zitat:
also Milli = Tausenstel 5000 = 5 * 1000 x Milli = x / 1000 demnach 5 * 1000 / 1000 = 5 in der Standardeinheit, was hier Sekunden sein sollten :stupid: |
Re: Feststellen, ob ein Programm eingefrohren ist.
Ich habe gerade was gesehen: WM_NULL
Zitat:
|
Re: Feststellen, ob ein Programm eingefrohren ist.
Habe auch Sekunden gemein, habe mich da nur verschrieben gehabt ;)
Gut, soweit funktioniert alles und wenn ich noch Hilfe brauche, melde ich mich. Danke :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz