4
WH_MOUSE
이 항상 호출되는 것은 아닙니다. 문제가 내가 WH_MOUSE
이 아닌 WH_MOUSE_LL
을 사용하고있을 수 있습니까?WH_MOUSE와 WH_MOUSE_LL 후크 사이의 차이점은 무엇입니까?
코드 :
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;
};
올바르게 이해합니까? WH_MOUSE 후크를 사용하고 있다면 DLL로 구현해야합니까? –
그 훅을 사용하여 해당 호출 외의 프로세스에서 이벤트를 잡아 내고 싶다면 SetWindowsHookEx – em70
이제는 분명합니다. 정말 고마워요! –