Probleme mit Hooks

  • Themenstarter Themenstarter jmapo
  • Beginndatum Beginndatum
J

jmapo

Hallo erstmal,

ich wollte mir mal diese Hooks, um Eingaben vor Windows abzufangen, anschauen.
Dazu habe ich dieses Tutorial gemacht:
http://www.tutorials.de/forum/c-c-tutorials/164662-tutorial-ueber-windows-hooks.html

Ich habe die DLL und die EXE wie im Tutorial, nur funktioniert es nicht so richtig.
Über den Debugger (Visual Studio 2008) habe ich herausgefunden, dass es wohl zuerst mal
an der MouseProc callback methode liegt.
Code:
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	// reagiert bisher immer nur wenn der mauszeiger auf dem fenster ist
	if (nCode < 0)
		return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);

	if(nCode == HC_ACTION)
	{
		if ( (wParam == WM_LBUTTONDOWN)||(wParam == WM_NCLBUTTONDOWN) )
		{
	            MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*)lParam;
	            HWND caller = FindWindow("Pipette", NULL);
				// caller wird von findwindow NULL zugewiesen
	            if(caller != NULL)
					PostMessage(caller, WM_USER+123, 0, MAKELPARAM(mhs->pt.x, mhs->pt.y));
		}
	}
	return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
}

Diese Methode wird komischerweise nur aufgerufen, wenn sich mein Mauszeiger über dem Anwendungsfenster befindet.
Ich habe den Hook aber so installiert, dass er global sein sollte.
Code:
g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0);
Aus der MSDN zu dem letzten Parameter:
Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.

Und die Methode FindWindow liefert mir immer einen nullpointer, obwohl meine exe die Klasse "Pipette" besitzt.
Code:
// Codeausschnitte
// aus der header datei
char szClassName[ ] = "Pipette";

// aus der cpp datei
 hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Pipette",			/* Title Text */
		   WS_SYSMENU|WS_MINIMIZEBOX, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           WINDOW_WIDTH,                 /* The programs width */
           WINDOW_HEIGHT,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

Kann mir jemand weiter helfen?
Ich komm einfach nicht drauf warum das so reagiert.
Danke schonmal!
 
HWND caller = FindWindow("Pipette", NULL);
zu
HWND caller = FindWindow(_T("Pipette"), NULL);
ersetzen. #include <tchar.h> nicht vergessen.

MouseProc wird immer global aufgerufen, nur der Debugger von VC2008 springt bei globalen aufrufen irgendwie nicht an.
 
Zurück