如何让我的 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);
这将创建一个挂钩并侦听鼠标操作的线程,而不会干扰您的主线程。
如何让我的 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);
这将创建一个挂钩并侦听鼠标操作的线程,而不会干扰您的主线程。