ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
331
331
EMPFEHLEN
-
08.04.10 15:43 #1jmapo Tutorials.de Gastzugang
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-tu...ows-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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
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.
Aus der MSDN zu dem letzten Parameter:Code :1
g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0);
Und die Methode FindWindow liefert mir immer einen nullpointer, obwohl meine exe die Klasse "Pipette" besitzt.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.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// 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!
-
09.04.10 09:49 #2jmapo Tutorials.de Gastzugang
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.
Ähnliche Themen
-
Hooks, Aspects und Observer
Von ZodiacXP im Forum Coders TalkAntworten: 0Letzter Beitrag: 10.05.10, 14:43 -
Mal wieder Windows-Hooks
Von Jellysheep im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 11.02.10, 21:44 -
[C]Hooks
Von jojo4ever im Forum C/C++Antworten: 1Letzter Beitrag: 30.06.08, 15:21 -
[VB6] Hooks?
Von VBMichi im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 26.05.06, 13:35 -
Hooks: Nachrichten bearbeiten
Von Surma im Forum Delphi, Kylix, PascalAntworten: 0Letzter Beitrag: 22.02.04, 20:40





Zitieren
Login






