I am hooking LowLevelMouseProc callback (WH_MOUSE_LL). If left or right button is pressed and held, WM_MOUSEMOVE and WM_?BUTTONUP events has wrong mouse coordinates.

This happens only in World of Warcraft window. And only if cursor is in first 2/3 of screen height and width. The x and y coordinates are just constant (values like 600 and 960) until button is released. In the bottom-right corner coordinates are ok. All other windows also are ok.

I am really shocked because this is system hook and I expected it is independent from actual window. Also I cannot understand what can I do.

SetWindowsHookEx(WH_MOUSE_LL, HookCallbackMouse, NULL, 0);

LRESULT __stdcall HookCallbackMouse(int nCode, WPARAM wParam, LPARAM lParam)
    if (nCode >= 0)
        const MSLLHOOKSTRUCT& mouseStruct = *((MSLLHOOKSTRUCT*)lParam);
        ProcessMouse(wParam, mouseStruct);

    // call the next hook in the hook chain. This is nessecary or your hook chain will break and the hook stops
    return CallNextHookEx(_hook, nCode, wParam, lParam);

void ProcessMouse(WPARAM event, const MSLLHOOKSTRUCT& mouseStruct)
    cout << event << "," << mouseStruct.pt.x << "," << mouseStruct.pt.y;
May be you have met this?

What may cause this problem? How can I prevent it?