c++ - 在两个线程中设置两个鼠标钩子(Hook)

标签 c++ windows winapi hook

我使用下面的代码来设置鼠标本地钩子(Hook):

//declare hook handle global variable:
static HHOOK hhk;
//set new hook:
hhk = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseWndProc, GetModuleHandle(NULL), GetCurrentThreadId());

这里是mouseproc回调函数的代码:

LRESULT CALLBACK MouseWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MOUSEHOOKSTRUCT *pMouseStruct = (MOUSEHOOKSTRUCT*)lParam;

    if(nCode < 0)
    {
    return CallNextHookEx(hhk, nCode, wParam, lParam);
    }

    //do something...

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

使用上述代码,我在第一个线程中设置了本地 Hook 。 在第二个线程中,我还需要设置新的本地 Hook 。问题是 - 当我设置新的钩子(Hook)(第二个线程)时,全局变量 hhk 将被覆盖。并且第一个钩子(Hook)的 mouseproc 现在使用了错误的钩子(Hook)句柄。正确的? 那么我必须将什么作为 CallNextHookEx() 函数的第一个参数传递?

最佳答案

CallNextHookEx 以来,您不需要知道 hook proc 中的 HHOOK 值忽略第一个参数(因此您可以只为第一个参数传递 NULL)。

您需要分别保存这两个 handle ,这样您就可以使用UnhookWindowsHookEx 移除两个 Hook 。稍后。

关于c++ - 在两个线程中设置两个鼠标钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26031406/

相关文章:

c++ GetCurrentThemeName 为经典 Windows 主题返回空值

c# - HKEY 到 Microsoft.Win32.RegistryKey 的转换

c++ - 尝试在自定义 QT Creator 文本编辑器中创建查找和替换循环。我好像无法设置光标位置

C++ 跨平台后台任务

windows - 宏碁显示器序列号

windows - Visual Studio 的 __cyg_profile_func_enter 等效项

c++ - 如何使用带套接字的重叠 I/O?

windows - 如果从静态库调用,Atl CDialogImpl 不会显示在 DoModal 上

c++ - Brew (MP) 支持/不支持 C++ 的哪些部分?

c++ - 冲突 std::set 和 NTL::vec_ZZ