AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Feststellen, ob ein Programm eingefrohren ist.
Thema durchsuchen
Ansicht
Themen-Optionen

Feststellen, ob ein Programm eingefrohren ist.

Ein Thema von Stony2k · begonnen am 23. Mär 2006 · letzter Beitrag vom 25. Mär 2006
Antwort Antwort
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#1

Feststellen, ob ein Programm eingefrohren ist.

  Alt 23. Mär 2006, 15:57
Es kann ja gut sein, dass eine Anwendung noch aktiv ist, diese aber nicht mehr reagiert, also eingefrohren ist.

Wie kann ich dies feststellen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 23. Mär 2006, 16:05
Schicke mit MSDN-Library durchsuchenSendMessageTimeOut MSDN-Library durchsuchenWM_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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 24. Mär 2006, 19:15
Moin Stony,

oder schau Dir mal die API-Funktion MSDN-Library durchsuchenIsHungAppWindow an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 24. Mär 2006, 22:09
Klingt nett, ich würde aber meine Finger davon lassen:
Zitat:
However, this function is not intended for general use. It is recommended that you do not use it in new programs because it might be altered or unavailable in subsequent versions of Windows.
Und im Endeffekt macht es ja nichts anderes, als was ich vorgeschlagen habe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 25. Mär 2006, 08:51
Ich habe nun folgendes gemacht:
Delphi-Quellcode:
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;
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?
Und wie kille ich dann den Prozess?

//Edit: Die Funktion KillProzess funzt einwandrei: http://www.delphipraxis.net/internal...messagetimeout
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 25. Mär 2006, 10:41
5000 sind 5 Sekunden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#7

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 25. Mär 2006, 10:54
Zitat von Luckie:
5000 sind 5 Sekunden.
Jupp ... Wert wird in Millisekunden angegeben,

also Milli = Tausenstel

5000 = 5 * 1000
x Milli = x / 1000

demnach 5 * 1000 / 1000 = 5 in der Standardeinheit, was hier Sekunden sein sollten
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 25. Mär 2006, 10:58
Ich habe gerade was gesehen: MSDN-Library durchsuchenWM_NULL
Zitat:
As another example, an application can check if a window is responding to messages by sending the WM_NULL message with the SendMessageTimeout function.
Hehe, habe ich doch intuitiv die richtige Lösung gepostet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Feststellen, ob ein Programm eingefrohren ist.

  Alt 25. Mär 2006, 11:38
Habe auch Sekunden gemein, habe mich da nur verschrieben gehabt

Gut, soweit funktioniert alles und wenn ich noch Hilfe brauche, melde ich mich.

Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 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