Was sind die Unterschiede zwischen WH_MOUSE und WH_MOUSE_LL Haken?
Habe ich herausgefunden, dass WH_MOUSE
ist nicht immer genannt. Könnte das problem sein, dass ich mit WH_MOUSE
und nicht 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;
};
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist der Unterschied im Verhalten, wenn der callback aufgerufen wird.
Wenn Sie mit der Low-Level-version, die Sie nicht erleiden, die Einschränkungen, die durch lpfn wegen der Art, wie Sie den Aufruf Ihrer hook-Funktion wird ausgeführt. Bitte Lesen Sie unten für weitere Informationen.
Zitat aus MSDN-doc für SetWindowsHookEx:
und von LowLevelKeyboardProc: