Problem mit PostQuitMessage nach dem Starten eines Explorer-Prozesses
Von: Felix Opatz (felix@zotteljedi.de) [Profil]
Datum: 14.06.2009 18:49
Message-ID: <h139lu$7jt$00$1@news.t-online.com>
Newsgroup: de.comp.os.ms-windows.programmer
Datum: 14.06.2009 18:49
Message-ID: <h139lu$7jt$00$1@news.t-online.com>
Newsgroup: de.comp.os.ms-windows.programmer
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/PostQuit-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/What_Is_Truth_0x3f_.aspx[ Auf dieses Posting antworten ]
Antworten
- Arno Welzel (15.06.2009 04:15)
- Felix Opatz (15.06.2009 21:48)
