SetWindowsHookEx с WH_MOUSE не захватывает перемещения мыши по области HTCAPTION - PullRequest
0 голосов
/ 02 июня 2009

Я пытаюсь использовать SetWindowsHookEx с WH_MOUSE для захвата событий перемещения мыши. Он работает везде, но в областях HTCAPTION (по крайней мере, в моем примере кода). Я не могу найти никаких ссылок на это поведение, и я попытался включить другое приложение, которое делает то же самое для отслеживания движений мыши. Используется также метод WH_MOUSE, и события генерируются, даже когда указатель мыши находится над областями надписей. Следовательно, оно должно работать, за исключением того, что это не так.

Есть идеи?

Редактировать: Я использую это, чтобы подключить все процессы. Я построил отдельную DLL, которая пересылает сообщения в какое-то внутреннее окно моего приложения. Я использую dwThreadId = 0. Я не получаю щелчок мыши в области заголовка.

1 Ответ

0 голосов
/ 15 июня 2009

Я понял это:

MouseHookProc. Mouseproc, данный SetWindowsHookEx, получает все события мыши, которые означают, что я должен проверить, что wParam равно WM_MOUSE или WM_NCMOUSEMOVE . Когда курсор находится над клиентской областью, принимается WM_MOUSE, а когда он находится над неклиентской областью, запускается WM_NCMOUSEMOVE (как в обычном proc сообщений).

LRESULT CALLBACK MouseHookProc(int nCode, WORD wParam, DWORD lParam)
{
    if(nCode>=0 && (wParam==WM_MOUSEMOVE || wParam==WM_NCMOUSEMOVE))
    {
        if(!hwnd)
            hwnd=FindWindow(0, "MyWindow");

        MSLLHOOKSTRUCT *mhs=(MSLLHOOKSTRUCT*)lParam;        
        PostMessage(hwnd, WM_MOUSEHOOK, wParam, 0);
    }
    return CallNextHookEx(hHook,nCode,wParam,lParam);
}

Я думал, что WM_MOUSE - это какое-то соответствующее значение, но не настоящее сообщение мыши, но оно есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...