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.
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.
Aus der MSDN zu dem letzten Parameter:
Und die Methode FindWindow liefert mir immer einen nullpointer, obwohl meine exe die Klasse "Pipette" besitzt.
Kann mir jemand weiter helfen?
Ich komm einfach nicht drauf warum das so reagiert.
Danke schonmal!
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);
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!