WinMain-Anwendung | empfangen von Messages UND normaler sonstige Code



  • guten abend,

    ich hatte eine WinMain-Anwendung die normal ablief, jetzt kommt aber dazu,
    das ich Messages von einer Hook-Dll empfange!

    code:

    while(GetMessage(&msg,NULL,0,0))
    {
    	TranslateMessage(&msg);
    	DispatchMessage(&msg);
    }
    

    da mein Code nun nur damit beschäftigt ist diese Messages zu Empfangen
    kann mein alter nicht mehr nebenbei ablaufen :-|

    ich habe es schon mit CreateThread(...); probiert aber keine chance, dann
    "läggt" das programm richtig übel!

    wie kann ich das regeln?

    danke!



  • -> PeekMessage()

    MSDN schrieb:

    Unlike the GetMessage function, the PeekMessage function does not wait for a message to be placed in the queue before returning.

    Sowas ?! 😉



  • ja danke schonmal das geht ja in die richtung!

    jetzt wollte ich aber nen Thread nebenher laufen lassen
    ( mit CreateThread(...); ) aber dann reagiert das Fenster wieder auf nix
    und bleibt einfach hängen :-|

    wenn ich Peakmessage(...) halt immer so in meiner Programm-Hauptschleife
    aufrufe verpasse ich viele nachrichten!!

    wie könnte ich das lösen?

    aber danke schonmal!!! 🙂



  • also ich wollte diese Funktion hier als
    Thread nebenher laufen lassen... warum geht des net? 😕

    void Babel_Message()
    {
    	MSG msg;
    
    	while(1)
    	{
    		if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    		{
    			//if(msg.message==WM_QUIT)
    				//exit(1);
    
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    }
    


  • Du musst auf Deklaration der Thread-Funktion achten:

    DWORD WINAPI Babel_Message(LPVOID param)
    {
        MSG msg;
    
        while(GetMessage(&msg,NULL,0,0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    

    Achtung: ungetestet! 🙂



  • @Babel: Wenn du immerzu schreibst "das geht nicht", dann hilft das hier auch keinem weiter. Eine detailierte Fehlerbeschreibung ist immer hilfreich.



  • msdn schrieb:

    The GetMessage function retrieves a message from the calling thread's message queue.

    Die GetMessage Funktion achtet auf die Messages für den aktuellen Thread, also die WinMain()-Funktion. Wenn du einen neuen Thread erstellst, kriegt der gar keinen Messages und der WinMain()-Thread verarbeitet nichts. Deswegen bleibt es hängen.

    1. Lösung:
    Das mit GetMessage in die WinMain()-Funktion schreiben und im Thread dein Programm ausführen.

    2. Lösung:
    Keine Threads benutzen! Nimm PeekMessage()! Das ist genau das was du suchst, und stockern sollte es eigentlich nicht.

    mfg.


Anmelden zum Antworten