Feststellen wie Programm beendet wird

14/09/2011 - 08:26 von Ahmed Martens | Report spam
Hallo Leute,

ich habe hier ein sog. TSR-Programm am laufen. Über eine Main-Prozedur
wird ein unsichtbares Formular gestartet. Auf diesem Formular ist ein
Timer, der regelmàßig arbeiten ausführt. Weitere Formulare gibt es nicht
bzw. werden über eine neue Programminstanz ausgeführt.

Jetzt möchte ich aber neben dem regulàren schließen über einen
Schalteraufruf, auch noch die anderen Programmbeendigungsarten
(Taskliste, Windows etc.) berücksichtigen. Leider wird aber das
QueryUnload-Ereignis vom unsichtbaren Formular nicht ausgeführt.

Gibt es noch eine weitere Möglichkeit festzustellen, wie mein Programm
beendet wird?

Ich möchte vor dem Beenden nàmlich noch Aufràumarbeiten ausführen.

Vielen Dank im voraus.
Gruß Ahmed
Antworten bitte nur in der Newsgroup.
Win7 Prof. 64bit / MS-Office 2010 Prof. 32bit
 

Lesen sie die antworten

#1 W. Wolf
14/09/2011 - 14:33 | Warnen spam
Am 14.09.2011 08:26, schrieb Ahmed Martens:
[...]

Gibt es noch eine weitere Möglichkeit festzustellen, wie mein Programm
beendet wird?




Mir ist nichts besseres als subclassing bekannt.
Hier auf die folgende Nachrichten lauschen:
WM_QUERYENDSESSION für Sitzungsende. Diese Nachricht mit einen
Rückgabewert ungleich 0 bestàtigen, damit Windows regulàr
heruntergefahren werden kann, sonst "hàngendes Programm"
WM_SYSCOMMAND / SC_CLOSE / WM_CLOSE Form wird vom Anwender geschlossen.
Was da sonst noch kommen könnte weiß ich nicht so genau, habe
mein großes API-Buch nicht dabei ;-)

Hier noch die paar Konstanten:
Const WM_QUERYENDSESSION = &H11 'Session soll beendet werden
Const WM_ENDSESSION = &H16 'Session wird beendet
Const WM_SYSCOMMAND = &H112 'WM_SYSCOMMAND+SC_CLOSE ->
SC_CLOSE = &HF060 'vbFormControlMenu
WM_CLOSE = &H10 'Code oder Taskmanager oder MDI-Parent

Schönen Gruß
W. Wolf

Ähnliche fragen