【问题标题】:Blocking mouse messages with hook用钩子阻止鼠标消息
【发布时间】:2021-11-16 10:15:24
【问题描述】:

我如何“阻止”WM_LBUTTONDOWN 消息被触发?

该函数在 dll 中,我也尝试使用 LowLevelMouseProc,但它不适用于错误代码:1429,意思是“全局唯一挂钩”。

  • 我不拥有相关窗口。

我尝试在下面的代码中返回WM_NULL,但它也不起作用,我还能尝试什么?

extern "C" __declspec(dllexport) LRESULT CALLBACK mouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        MSLLHOOKSTRUCT* mhs          = nullptr;
        int x = 0;
        int y = 0;
    
        std::wstringstream ss;
        std::wstringstream ss2;
    
        if (nCode == HC_ACTION)
        {
            switch (wParam)
            {
            case WM_LBUTTONDOWN:
                ss << L"\nWM_LBUTTONDOWN " << wParam;
                wParam = WM_NULL;
                break;
            case WM_LBUTTONUP:
                ss << L"\nWM_LBUTTONUP " << wParam;
                break;
            case WM_MOUSEMOVE:
                break;
            case WM_RBUTTONDOWN:
                ss << L"\nWM_RBUTTONDOWN: " << wParam;
                break;
            case WM_RBUTTONUP:
                ss << L"\nWM_RBUTTONUP: " << wParam;
                break;
            default:
                ss << L"\nUnknown msg: " << wParam;
                break;
            }
        }
    
        OutputDebugString(ss.str().c_str());
    
        mhs = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam);
        x = mhs->pt.x;
        y = mhs->pt.y;
    
        ss2 <<  L"\nx: " << x << L" y: " << y;
        OutputDebugString(ss2.str().c_str());
    
        return CallNextHookEx(NULL, nCode, wParam, lParam);

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    根据MouseProc callback function 文档:

    如果nCode大于等于0,并且hook过程没有处理该消息,强烈建议调用CallNextHookEx并返回它返回的值;否则,其他安装了 WH_MOUSE 钩子的应用程序将不会收到钩子通知,因此可能会出现错误行为。 如果钩子过程处理了消息,它可能会返回一个非零值,以防止系统将消息传递给目标窗口过程。

    至于您的WH_MOUSE_LL 错误,您不能在特定线程的基础上安装该挂钩,只能全局安装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多