WH_MOUSE (globaler mouse hook)
-
Hallo!
Ich möchte einen globalen Mouse Hook setzen, und hab das auch hinbekommen, allerdings finde ich das Verhalten merkwürdig, vielleicht könnt ihr mir ja sagen woran das liegt.
Hier mal der minimalistische Code:
Die main Funktion:
int main(int argc, char* argv[]) { installHook(); MessageBoxA(NULL,"Press ok to quit","",MB_OK); return 0; }
Die DLL:
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved ) { switch ( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: MessageBoxA(NULL,"LOADED","LOADED",MB_OK); gMod = hModule; break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } HHOOK installHook() { return (gHook= SetWindowsHookEx(WH_MOUSE,MouseProc,(HINSTANCE)gMod,0)); } BOOL removeHook() { return UnhookWindowsHookEx(gHook); } LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode == HC_ACTION) { if(wParam == WM_RBUTTONDOWN) { removeHook(); MessageBoxA(NULL,"test","test",MB_OK); return 0; } } return CallNextHookEx(gHook,nCode,wParam,lParam); }
Ich möchte, dass wenn die rechte Maustaste gedrückt wird einmal eine MessageBox aufpoppt, klicke ich den Bereich der main App funktioniert das wunderbar. Klicke ich jedoch auf eine Fläche außerhalb (sprich ein anderes Fenster) dann wird natürlich die DLL ein 2. mal geladen (in den Prozess den ich anklicke) jedoch bekomm ich aber 12 Message boxen mit "test"
ich komm nicht drauf warum, außerdem hat der removeHook() aufruf keine Auswirkung, der Hook bleibt weiter bestehen (außer ich klicke in den Bereich der main App).
Hoffe jemand kann mir helfen :xmas1: