gpt4 book ai didi

c++ - MouseProc (WH_MOUSE) 事件触发两次

转载 作者:可可西里 更新时间:2023-11-01 10:42:41 28 4
gpt4 key购买 nike

我想问一个关于我一直遇到的问题的问题。

我使用以下函数安装了一个 WH_MOUSE Hook :

hMouseHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseHookProc, dllInstance, threadId);

threadId 是使用GetWindowThreadProcessId 函数获得的。这是成功的,因为钩子(Hook)只在我想要的过程中起作用。 dllInstance 是从 DllMain 入口点获得的。值得一提的是,hMouseHook 位于共享数据段 (#pragma data_seg(".shared"))。以下代码显示了在上述 SetWindowsHookEx 调用中提供的 MouseHookProc:

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode < 0 || !isRunning())
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);

switch (wParam) {
case WM_LBUTTONDOWN: {
OutputDebugStringA("Mouse button down!\n");
break;
}
}

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

在测试时,isRunning() 返回 TRUE(我仔细检查过)。我的问题是“按下鼠标按钮!”每次按住鼠标左键时都会打印两次消息。鉴于提供的代码,为什么会发生这种情况?我目前正在使用一种解决方法,但想了解为什么会发生这种情况。

我在 Visual Studio 2015 中调试启动器程序(调用包含 SetWindowsHookEx 的 DLL 函数的程序)并将其附加到我正在使用的进程(调试 -> 附加到进程)。

提前感谢您的任何回复。

编辑:似乎只有第一次调用程序时才调用 nCode == HC_ACTION。我想这是对我的问题的回答,但我想知道为什么我的程序第二次被 nCode == HC_NOREMOVE 调用?

最佳答案

使用 nCode == HC_NOREMOVE 调用一次,然后使用 nCode == HC_ACTION 再次调用。

关于c++ - MouseProc (WH_MOUSE) 事件触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192597/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com