2009-06-10 46 views
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); 

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

回答

3

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

0

if(!(lParam & 0x80000000)) 

按下该键时,是真实的。当它被释放时,你做没有什么

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

0

嗯。第一点你确定你希望在这里使用你自己的进程线程ID。该对话框是否在您的流程线程中?

+0

在这种情况下,它实际上是我的线程,但我同意它不明确的问题。 – 2009-06-10 19:42:53

相关问题