Maus hook funktioniert nicht (richtig)
-
Ich habe einen Testdialog erstellt, um einen Maushook zu testen.
In der Applikationsklasse erstelle ich im InitInstance dann den Hook :hMouseHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC) MouseHookProc, AfxGetInstanceHandle(),AfxGetThread()->m_nThreadID);Die Callbackfunktion:
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode < 0) return CallNextHookEx(hMouseHook, nCode, wParam, lParam); if(nCode == HC_ACTION) { MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*) lParam; long nTempX = mhs->pt.x*2; long nTempY = mhs->pt.x*2; HWND hwnd=FindWindow(NULL,"hooktest"); if(!hwnd) TRACE("Fenster nicht gefunden !"); PostMessage(hwnd, nCode, wParam, MAKELPARAM(nTempX, nTempY)); CString str; str.Format("X:%d (%d) ,Y:%d (%d)\n",nTempX,mhs->pt.x,nTempY,mhs->pt.y); TRACE(str); } return CallNextHookEx(hMouseHook, nCode, wParam, lParam); }Das Ding läuft auch wunderbar.
Ich schicke nun die veränderten Mauskoordinaten an den Dialog (der zu meiner anwendung gehört), aber leider kommen dort die ORIGINALKoordinaten an.
Ich plage mich bereits 2 Tage mit diesem Problem und komme einfach nicht dahinter, was ich dabei falsch mache.In meinem Dialog lasse ich im OnLButtonDown die angekommenen Korrdinaten ausgeben, was aber NICHT meinen geänderten entspricht.
Kann es sein das mein Hook gar nicht funktioniert ???Bitte dringend um Hilfe, da ich in der FAQ bzw. Google noch nichts gefunden habe, das mir weiterhelfen kann.
Danke !
In diesem Sinne:
Happy coding !

#include <afxwin.h> class CMyApp : CWinApp { public: BOOL InitInstance() { AfxMessageBox("Hello hook !"); } } CMyApp TheApp;PS: Win2k/SP4 bzw WINXP, VC6/SP5
-
So, hab nun meinen Fehler behoben, die koordinaten kommen nun richtig im dialog an.
So meine Callback funktion sieht nun so aus:
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode < 0) return CallNextHookEx(hMouseHook, nCode, wParam, lParam); // Verhindern das eine Nachricht mehrmals verarbeitet wird. int nX=0; int nY=0; if(nCode == HC_ACTION) { MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*) lParam; nX=mhs->pt.x*2; nY=mhs->pt.y*2; HWND hwnd = FindWindow(NULL,"hooktest"); if(!hwnd) TRACE("Fenster nicht gefunden !"); if(wParam==WM_LBUTTONDOWN) { CString str; str.Format("MH HOOK %d (%d) | %d (%d)\n",nX,mhs->pt.x,nY,mhs->pt.y); TRACE(str); PostMessage(hwnd, wParam, MK_LBUTTON, MAKELPARAM(nX,nY)); } if(wParam==WM_LBUTTONUP) { CString str; str.Format("MH HOOK %d (%d) | %d (%d)\n",nX,mhs->pt.x,nY,mhs->pt.y); TRACE(str); PostMessage(hwnd, NULL, MK_LBUTTON, MAKELPARAM(nX,nY)); } } return CallNextHookEx(hMouseHook, nCode, wParam, MAKELPARAM(nX,nY)); }aber neues problem....... KEINES meiner Steuerelemente reagiert.
Kann mir jemand sagen, was ich falsch gemacht, bzw. übersehen habe ???ich bin schon am verzweifeln......
-
an einen moderator:
habe lösungweg gefunden - daher bitte thread auf eis legen.
wenn ich die lösung ausgearbeitet habe - wird sie gepostet !mfg