0

我为我无法控制的对话框添加了一个键盘钩子(它在封闭源代码的库中运行自己的 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);

有没有办法阻止击键被发送到对话框中具有焦点的控件?

4

3 回答 3

3

您可以通过替换其GWLP_WNDPROC(请参阅本页的备注部分)值来对有问题的控件进行子类化。基本概念是过滤掉WM_KEY*消息,然后将其余消息传递给原始 WndProc。

于 2009-06-10T16:26:49.313 回答
0

if(!(lParam & 0x80000000))

按下键时为真。当它被释放时,你什么都不做。

KeyHookProc在按键被按住或释放时被调用。

于 2009-06-10T16:28:42.180 回答
0

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

于 2009-06-10T16:33:55.620 回答