[C++] windows messages

rook

Erfahrenes Mitglied
kann mir mal einer sagen wieso folgendes programm nicht so funktioniert, wie ich es will?

Code:
#include <stdio.h>
#include <windows.h>

int main(int argc, char **argv) 
{
	MSG msg;
	HWND hwnd = FindWindow(NULL, "Test");
	if(hwnd == NULL)
		return 1;

	while(true)
	{
		printf("Searching for Messages...");
		if(PeekMessage(&msg, hwnd, 0, 0, PM_NOREMOVE))
		{
			printf("\nGetting Message...");
			GetMessage(&msg, hwnd, 0, 0);
			printf("%i (wParam: %i), Time: %i\nWaiting...\n", msg.message, msg.wParam, msg.time);
			Sleep(5000);
		}
		else
		{
			printf("No Message.\n");
		}
	}

	return 0;
}

ich hab mit diesem programm vor, die nachrichten eines anderen programmes abzufangen, dummer weisse sagt mir mein programm "No Message", ich weiss nicht warum.. das andere programm, was abgefragt wird, hat immer eine message, weil ein Timer eingeschaltet ist und der jede 100ms aufgerufen wird.... und auch wenn ich auf einen button klicke sagt mir mein programm das keine nachricht vorliegt... hab mich im MSDN auch nicht schlauer gemacht...
 
Also soweit ich weiß kann man so ohne weiteres keine Nachrichten eines anderen Programmes "abfangen" wenn dann geht das glaube ich nur mit einem Hook.

Gruss Homer
 
dann ist fraglich wozu das HWND feld in der funktion ist, wenn es nur in dem eigenen programm geht...?!
scheinst aber vieleicht recht zu habn.... mhh...
 
Na ein Programm kann ja auch mehrere Fenster haben, und dazu sollte der HWND-Parameter gut sein.
Aber wie gesagt, ich bin mir da nicht ganz sicher.

Gruss Homer
 
Ich versuchs mal zu erklären, wie ich denke warum es nicht funktioniert.

In Windows gibt es eine SystemQueue, welches alle Nachrichten an die Applikationen die Laufen sendet. Innerhalb der Applikation gibt es dann die MessageQueue, die verteilt die Nachrichten an die Fenster!
Deshalb braucht man das Fenster-Handle. Die dann dort aus der MessageQueue entnommen werden.

Du hast zwar das Handle des Fensters, aber Du befindest Dich in einer anderen Applikation. Daher vermute ich, dass es nicht geht.

Für Nachrichten einer anderen Applikation kann man nur mit Hilfe eines Hooks realisieren. Man greift dort sehr tief im System ein.
Es gibt verschiedene Hooks: Maus, Tastatur etc.
 
Zurück