Home > Net >  Blocking mouse messages with hook
Blocking mouse messages with hook

Time:09-23

How do i 'block' the WM_LBUTTONDOWN message to be fired?

The function is inside of a dll, I also tried to use LowLevelMouseProc but it does not work with error code: 1429 which means "global only hook".

  • I don't own the window in question.

I tried to return a WM_NULL in the code below, but it also doesn't work, what else i could try?

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);

CodePudding user response:

Per the MouseProc callback function documentation:

If nCode is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_MOUSE hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.

As for your WH_MOUSE_LL error, you can't install that hook on a thread-specific basis, only globally.

  • Related