![]() |
Event beim Schließen / "Abschiessen" des Programms
Hallo,
ich suche ein Event das ausgelöst wird beim Schließen des Programms. Es soll zu dem zeitpunkt ein wert in einer bestimmten Datei geändert werden, der anzeigt, dass das Programm nicht mehr läuft. Wenn alles planmäßig läuft kann ich das im OnClose machen. Wie fange ich jetzt aber die Möglichkeit ab, dass sich das Programm aufhängt (warum auch immer) und das OnCLose nicht ausgelöst wird (z.B. Beenden mit dem Taskmanager/Prozess beenden).. Vielen Dank KahPee |
AW: Event beim Schließen / "Abschiessen" des Programms
In der .dpr
Delphi-Quellcode:
Wenn das Programm abgeschossen wird ... Das kann man nicht abfangen
Begin
... Application.Run; // Hier ist der EndOfApplicationEvent end. BTW OnClose wird nicht nur beim Beenden der Application aufgerufen. Eine weitere Möglichkeit ist es auch eine Unit zu schreiben und im initialization und finalization Teil dieses zu handeln. Das ist eigentlich am elegantesten. |
AW: Event beim Schließen / "Abschiessen" des Programms
Falls du das Abschießen irgendwie mitbekommen willst, könntest du über
![]() |
AW: Event beim Schließen / "Abschiessen" des Programms
Und was hat er davon? Ich kann dir nicht ganz folgen. Und ich wäre mir nicht so sicher, ob die API-Funktion noch aufgerufen wird, weil der Prozess ja abgeschossen wird. Wenn der Klitschko dir eine vor die Birne haut, dann wirst du auch keine Zeit mehr haben dir die Nase zu putzen bevor du umfällst. ;)
|
AW: Event beim Schließen / "Abschiessen" des Programms
Vielleicht ist das auch der falsche Ansatz (weil hier jemand fragt was hab ich davon). Ich habe vor, dass das Programm nicht zweimal gestartet werden kann. Mein erster Gedanke war beim Starten zu gucken ob die "MeinProgramm.exe" schon gestartet ist. Nur ist es so, dass sich das Programm logischer Weise dann selbst erkennt^^. Nun sollte eine Booleanvariable in einer Datei genau das Problem beheben. Beim Start wird die Variable auf true und beim schließen auf false gesetzt. Das programm startet in der Folge nur wenn diese Variabele auf false steht. Wenn das Programm nun aber "abgeschossen" wird. Weil es einen Bug hat und nicht mehr weiterläuft. Dann gibt es das Problem, dass man den Wert erst per Hand ändern muss damit das Programm wieder startet.
Gibt es noch andere Lösungsvorschläge - jetzt wo ich ein bisschen klarer ausgedrückt habe worum es mir eigentlich geht? mfg Kahpee |
AW: Event beim Schließen / "Abschiessen" des Programms
Zitat:
Nun ob er schaut ob in einer Datei ein entsprechender Wert gesetzt ist, oder ob eine Datei vorhanden ist ... kommt ja quasi aufs gleiche heraus ... allerdings um zu überprüfen ob die Anwendung aktuell läuft oder nicht kann ich ja auch bei den laufenden Prozessen nachsehen ;) Viel interessanter ist es zu wissen, ob das Programm während der letzten Ausführung abgeschossen (bzw. unkonventionell) beendet wurde. Und dafür müsste die Datei bestehen bleiben. @KahPee Schau mal nach ![]() |
AW: Event beim Schließen / "Abschiessen" des Programms
Die eleganteste Art und Weise, ein Programm vor mehrfachem Starten zu schützen ist eine Mutex. Einfach mal suchen, dann findest du auch die Beispiele dazu.
ein paar Links:
Bernhard |
AW: Event beim Schließen / "Abschiessen" des Programms
Delphi-Quellcode:
procedure AbortIfNotUnique (const Bezeichnung: string);
begin createMutex( nil, true, PWideChar(Bezeichnung)); if GetLastError = ERROR_ALREADY_EXISTS then begin MessageDlg('Das Programm '+Bezeichnung+' ist schon in Betrieb'#13#10 +'Sie können immer nur eine Version des Programmes starten', mtError,[mbOk],0); halt; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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