I found that WH_MOUSE not always called. Could the problem be that I'm using WH_MOUSE and not WH_MOUSE_LL ?
Code:
class MouseHook { public: static signal<void(UINT, const MOUSEHOOKSTRUCT&)> clickEvent; static bool install() { if (isInstalled()) return true; hook = ::SetWindowsHookEx(WH_MOUSE, (HOOKPROC)&mouseProc, ::GetModuleHandle(NULL), NULL); return(hook != NULL); } static bool uninstall() { if (hook == NULL) return TRUE; bool fOk = ::UnhookWindowsHookEx(hook); hook = NULL; return fOk != FALSE; } static bool isInstalled() { return hook != NULL; } private: static LRESULT CALLBACK mouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION && (wParam == WM_LBUTTONDOWN || wParam == WM_NCLBUTTONDOWN || wParam == WM_RBUTTONDOWN || wParam == WM_NCRBUTTONDOWN || wParam == WM_MBUTTONDOWN || wParam == WM_NCMBUTTONDOWN )) { MOUSEHOOKSTRUCT* mhs = (MOUSEHOOKSTRUCT*) lParam; clickEvent(wParam, *mhs); } return ::CallNextHookEx(hook, nCode, wParam, lParam); } static HHOOK hook; };
source share