首页 > 解决方案 > 按住 mouse1 时如何在 Windows Mousehook 中重复我的代码

问题描述

按住鼠标左键时,我需要在鼠标钩中重复我的功能。但是使用我当前的代码,它只会被调用一次。我假设当我按住鼠标左键时,代码会被一遍又一遍地调用,我不确定这是否真的有效,我想尝试。我需要代码在钩子中运行以用于计时目的。

LRESULT __stdcall hk_mouse( int nCode, WPARAM wParam, LPARAM lParam )
{
    if (nCode >= 0)
    {
        switch (wParam) {
            case WM_LBUTTONDOWN:
            {
                Beep( 1000, 100 );
                break;
            }
            case WM_LBUTTONUP:
            {
                break;
            }
            default:
            {
                break;
            }
        }
    }

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

标签: c++winapi

解决方案


鼠标按钮消息不会在 Windows 中重复。

当您收到时,WM_LBUTTONDOWN您应该创建一个具有所需重复延迟的计时器,然后WM_TIMER在您的钩子 proc 中处理消息并查找您在创建计时器时指定的计时器 ID。

当鼠标按钮被释放并且你收到WM_LBUTTONUP你应该删除计时器

您应该注意,您为响应WM_TIMER消息而执行的任何代码也应该在WM_LBUTTONDOWN事件中执行(除非您希望在第一次按下按钮时有延迟),因此最好将该代码放在一个函数中,然后可以从两个地方调用。


推荐阅读