我为一个我无法控制的对话框添加了一个键盘钩子(它在具有闭源的库中运行自己的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);
有没有办法阻止将键击发送到对话框中具有焦点的控件?
答案 0 :(得分:3)
您可以通过替换其GWLP_WNDPROC
(请参阅remarks section of this page)值来对相关控件进行子类化。基本概念是您过滤掉WM_KEY*
消息,然后将其余消息传递给原始WndProc。
答案 1 :(得分:0)
此
if(!(lParam & 0x80000000))
按下键时为true。当它被释放时,你 nothing 。
按住键或释放键时会调用 KeyHookProc 。
答案 2 :(得分:0)
嗯。首先,您确定要在此处使用自己的流程线程ID。对话框肯定在你的进程线程下吗?