【问题标题】:Suppress keystrokes to dialog抑制对对话框的击键
【发布时间】:2010-11-01 20:53:53
【问题描述】:

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

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

【问题讨论】:

    标签: winapi keyboard dialog hook


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这个

      if(!(lParam & 0x80000000))
      

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


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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 在这种情况下,它实际上是我的线程,但我同意问题并不清楚。
        猜你喜欢
        • 2011-05-10
        • 2013-09-02
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多