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
これは明らかです。ありがとうございます! –