Как заставить MouseHookProc не обрабатывать щелчок - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь использовать SetWindowsHookExA () с WH_MOUSE_LL для готовых низкоуровневых щелчков мыши, которые вводятся.

Вот мой код для перехвата.

DWORD dwThreadMain; // The process main thread. (Already have this)
HWND mainWindow; // Already have this pointer
MSG hMsg;

MouseHOOK = SetWindowsHookExA(WH_MOUSE_LL, MouseHookProc, NULL, dwThreadMain);
if (!MouseHOOK) {
    // Cant't Hook
}

KeyBoardHOOK = SetWindowsHookExA(WH_KEYBOARD_LL, KeyBoardHookProc, NULL, dwThreadMain);
if (!KeyBoardHOOK) {
    // Cant't HOOK
}

while (GetMessage(&hMsg, mainWindow, 0, 0)) {
    TranslateMessage(&hMsg);
    DispatchMessage(&hMsg);
}

Это мой MouseHookProcи KeyBoardHookProc:


LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION) {
        if (wParam == WM_RBUTTONUP || wParam == WM_RBUTTONDOWN
            || wParam == WM_LBUTTONUP || wParam == WM_LBUTTONDOWN) {
            MSLLHOOKSTRUCT* hookStruct = (MSLLHOOKSTRUCT*)lParam;

            if ((hookStruct->flags & LLMHF_INJECTED) == LLMHF_INJECTED) {
                MessageBoxA(NULL, "MOUSE INJECTED!", "POOR MOUSE", MB_OK);
                return TRUE;
            }

            if ((hookStruct->flags & LLMHF_LOWER_IL_INJECTED) == LLMHF_LOWER_IL_INJECTED) {
                MessageBoxA(NULL, "MOUSE INJECTED!", "POOR MOUSE", MB_OK);
                return TRUE;
            }
        }
    }

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

LRESULT CALLBACK KeyBoardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION) {
        if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
            KBDLLHOOKSTRUCT* hookStruct = (KBDLLHOOKSTRUCT*)lParam;

            if ((hookStruct->flags & LLKHF_INJECTED) == LLKHF_INJECTED) {
                MessageBoxA(NULL, "KEYBOARD INJECTED!", "POOR KEYBOARD", MB_OK);
                return TRUE;
            }

            if ((hookStruct->flags & LLKHF_LOWER_IL_INJECTED) == LLKHF_LOWER_IL_INJECTED) {
                MessageBoxA(NULL, "KEYBOARD INJECTED!", "POOR KEYBOARD", MB_OK);
                return TRUE;
            }
        }
    }
    return CallNextHookEx(KeyBoardHOOK, nCode, wParam, lParam);
}

Проблема здесь не в перехвате, окна сообщений отображаются, когда есть введенный флаг.Клавиатура блокирует ввод.Но только для мыши «возвращаемое ИСТИНА» не препятствует обработке клика.

Я думаю, что что-то пропустил ... Есть другой способ сделать это?

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