Message Loop ohne Fenster??



  • Moin,
    Wie schaffe ich eine Message Loop ohne fenster? Ich brauch das nur
    um WM_QUERYENDSESSION abszufangen.

    #include <windows.h>
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
    	MSG message;
    	while(GetMessage(&message, NULL, 0, 0))
    	{
    
    		switch(message.message)
    		{
    			case WM_QUERYENDSESSION:			
    			case WM_ENDSESSION:
    				MessageBox(NULL,"Test","Test",NULL);
    				break;
    			default:
    				MessageBox(NULL,"Test","Test",NULL);
    				break;
    		}
    
    		TranslateMessage(&message);
    		DispatchMessage(&message);
    	}
    
    	return 0;
    }
    

    Funktioniert bei mir Nicht...was istflasch?
    MFG



  • Verstecktes Fenster benützen, afaik gibts keine Nachrichten ohne Fenster.

    MfG SideWinder



  • Windows-Messages gibt es schon ohne Windows! Das ganze heisst dann Thread-Messages (das ist genau das was der OP gepostet hat).
    Damit kann man aber keine Nachrichten empfangen, die z.B. an alle Top-Level-Windows versendet werden, da ja diese Message-Loop kein Fenster hat sondern nur via "PostThreadMessage" (und consorten) angesprochen werden kann.

    Wenn Du auf globale Messages reagieren willst, musst Du einfach ein Unsichtbares Fenster erzeugen...

    Wenn Du aber auf WM_QUERYENDSESSION aus einer Anwendung ohne Fenster reagieren willst, dann solltest Du eigentlich "SetConsoleCtrlHandler" verwenden:
    http://msdn.microsoft.com/library/en-us/dllproc/base/setconsolectrlhandler.asp


Anmelden zum Antworten