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!
-
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.