禁止按键进行对话

时间:2009-06-10 16:01:48

标签: winapi keyboard dialog hook

我为一个我无法控制的对话框添加了一个键盘钩子(它在具有闭源的库中运行自己的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 个答案:

答案 0 :(得分:3)

您可以通过替换其GWLP_WNDPROC(请参阅remarks section of this page)值来对相关控件进行子类化。基本概念是您过滤掉WM_KEY*消息,然后将其余消息传递给原始WndProc。

答案 1 :(得分:0)

if(!(lParam & 0x80000000))
按下键时

为true。当它被释放时,你 nothing

按住键或释放键时会调用 KeyHookProc

答案 2 :(得分:0)

嗯。首先,您确定要在此处使用自己的流程线程ID。对话框肯定在你的进程线程下吗?