Problem mit PostQuitMessage nach dem Starten eines Explorer-Prozesses

14/06/2009 - 18:49 von Felix Opatz | Report spam
Hallo Leute,

ich habe gerade eine ganze Weile an einem Problem rumgekaut, das ich nun
auf ein Minimal-Beispiel zusammenschrumpfen konnte:

http://www.zotteljedi.de/tmp/usenet...-Problem.c

Das Programm startet auf Tastendruck einen neuen Prozess, wahlweise
Explorer.exe oder Notepad.exe. Wenn man ALT+F4 drückt (oder das
Schließen-Symbol klickt) wird das Programm beendet, indem es in WM_CLOSE
ein PostQuitMessage aufruft und die Nachrichten-Schleife bei einem
Rückgabewert von FALSE für GetMessage abbricht (wie üblich also).

1) Programm starten, Fenster schlissen
2) Programm starten, 'n' drücken, Fenster schliessen
3) Programm starten, 'e' drücken, Fenster schliessen

Bei 1 und 2 wird das Programm verlassen, bei 3 jedoch nicht.

Das WM_CLOSE wird durchlaufen, das PostQuitMessage wird aufgerufen. Aber
nach dem Starten des Explorers scheint es einfach keine Wirkung mehr zu
haben. Ich habe mir auch das hWnd in WM_CLOSE angeschaut, ist in allen
Fàllen das gleiche wie in WM_CREATE, d.h. das dort gepostete WM_QUIT
erreicht auch, in der Theorie zumindest, das richtige Fenster.

Wenn ich WM_CLOSE ignoriere und die Default-Behandlung wirken lasse,
wird das Fenster zerstört (WM_DESTROY hatte ich gesehen), und irgendwann
liefert GetMessage nur noch -1, weil das Handle des Fensters ungültig
geworden ist. Man kann darauf reagieren und die Nachrichten-Schleife
verlassen, aber das hat den Beigeschmack von falschem Vorgehen.

Umgebung ist Windows 7 RC unter Visual C++ 2008 Express Edition, mit
aktiviertem Aero und dem ganzen übrigen Eye-Candy.

Hat jemand einen sachdienlichen Hinweis für mich?
Kann das mal jemand auf einem anderen Windows testen?

Gruß,
Felix

PS: Ich finde Funktionen die BOOL zurückliefern, aber TRUE, FALSE und -1
als tatsàchliche Ergebnisse haben, extrem pervers. Erinnert an diesen
Klassiker: http://thedailywtf.com/Articles/Wha...0x3f_.aspx
 

Lesen sie die antworten

#1 Arno Welzel
15/06/2009 - 04:15 | Warnen spam
Felix Opatz schrieb:

Hallo Leute,

ich habe gerade eine ganze Weile an einem Problem rumgekaut, das ich nun
auf ein Minimal-Beispiel zusammenschrumpfen konnte:

http://www.zotteljedi.de/tmp/usenet...-Problem.c



Es ist keine gute Idee, sein Programm mit PostQuitMessage() als Reaktion
auf WM_CLOSE beenden zu wollen.

Siehe dazu auch:

<http://blog.m-ri.de/index.php/2007/...enden/>
<http://msdn.microsoft.com/en-us/library/ms644945(VS.85).aspx>



http://arnowelzel.de
http://de-rec-fahrrad.de

Ähnliche fragen