如何让我的 mousehook 从单独的线程回调? C++

How do I get my mousehook to callback from a seperate thread? C++

如何让我的 mousehook 从单独的线程回调,以避免它干扰我的主线程,并导致 mouselag?

HHOOK Mousehook;
int trial=0;  //paintflag for testing

LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case WM_LBUTTONDOWN:
    trial = 1; //set paintflag
    InvalidateRect(hWnd, NULL, TRUE);
    break;
case WM_RBUTTONDOWN:
    PostQuitMessage(0);
    break;
default:
    break;
}
return CallNextHookEx(Mousehook, nCode, wParam, lParam);
}

这是我的函数,调用方式是

Mousehook = SetWindowsHookEx(WH_MOUSE_LL, HookCallback, NULL, 0);

但我不知道如何将所有这些变成一个单独的线程和单个调用。

谁知道好方法?任何帮助将不胜感激,这样有可能吗?

我知道怎么做了。至少现在,这就是我为我的 mousehook 创建一个指定线程的方式,这样它就可以在后台 运行:

声明我的钩子和回调例程

HHOOK Mousehook;

LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    switch (wParam)
    {
    case WM_LBUTTONDOWN: //incase lmb down
       //
        break;
    case WM_RBUTTONDOWN: //incase of rmb down
      //
        break;
    default:
        break;
    }

return CallNextHookEx(Mousehook, nCode, wParam, lParam);
}

不过这已经是老生常谈了,有什么诀窍吗?首先添加线程

#include <thread>

using std::thread  //for convenience

然后我们创建线程 运行s:

的函数
void mhook()
{ 
MSG msg;
Mousehook = SetWindowsHookEx(WH_MOUSE_LL, HookCallback, NULL, 0);
    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

这将使线程继续等待消息。现在我们需要做的就是像这样创建线程:

thread listen(mhook);

这将创建一个挂钩并侦听鼠标操作的线程,而不会干扰您的主线程。