Подавить нажатия клавиш в диалоге - PullRequest
0 голосов
/ 10 июня 2009

Я добавил хук клавиатуры для диалога, которым я не управляю (он запускает свою собственную функцию DialogProc в библиотеке с закрытым исходным кодом). Я могу захватить нажатия клавиш, но нажатие клавиш всегда отправляется диалогу. Это вызывает звуковые сигналы об ошибках и странное поведение.

Установка крючка:

hKeyHook=SetWindowsHookEx(WH_KEYBOARD, KeyHookProc, hInst, GetCurrentThreadId());

Функция крючка:

LRESULT CALLBACK KeyHookProc(int code, WPARAM wParam, LPARAM lParam)
{
    if(!(lParam & 0x80000000))
    {
        if(wParam == VK_mykey)
        {
            // Do my stuff

            return 0;  // Don't continue the hook chain
        }
    }

    // Continue with next hook
    return CallNextHookEx(hKeyHook, code, wParam, lParam);
}

Освобождение крючка:

UnhookWindowsHookEx(hKeyHook);

Есть ли способ остановить отправку нажатия клавиши на элемент управления, который имеет фокус в диалоговом окне?

Ответы [ 3 ]

3 голосов
/ 10 июня 2009

Вы можете создать подкласс рассматриваемого элемента управления, заменив его значение GWLP_WNDPROC (см. Раздел примечания на этой странице ). Основная концепция заключается в том, что вы отфильтровываете сообщения WM_KEY*, а затем передаете остальные исходному WndProc.

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

Хм. Во-первых, вы уверены, что хотите использовать здесь свой собственный идентификатор потока процесса. Диалог определенно находится под вашим потоком процесса?

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

Это

if(!(lParam & 0x80000000))

верно при нажатии клавиши. Когда он выпущен, вы ничего не делаете .

KeyHookProc вызывается, когда клавиши удерживаются или когда они отпущены.

...