陷阱WM_SETFOCUS消息

时间:2010-01-26 09:20:28

标签: c++ winapi hook

我想在所有当前窗口上捕获WM_SETFOCUS消息。 最好的方法是什么?

我认为SetWindowsHookEx可以用于此目的。它可以与WH_CALLWNDPROC或WH_MSGFILTER一起使用吗?

另外,它提到钩子程序必须在单独的DLL中。是否需要。 我可以在安装钩子的同一个DLL中没有钩子程序。

2 个答案:

答案 0 :(得分:1)

是的,你可以在安装钩子的同一个DLL中使用钩子proc。你相信的要求与你在另一个过程中设置Windows钩子有关。我相信。

我不熟悉WH_CALLWNDPROC钩子类型,但我相信你可以使用被描述为对“基于计算机的训练”应用程序有用的WH_CBT,但似乎也有一些非常有用的功能。通知的一个事件是:

  

<强> HCBT_SETFOCUS
  窗口即将接收键盘焦点。

答案 1 :(得分:1)

一个钩子proc必须在一个dll中,但它不必是一个与你用来安装钩子的dll不同的dll。文档提到“单独的dll”的原因是因为他们假设安装钩子的代码将在exe中而不是dll。

WH_CALLWNDPROC挂钩应该看到WM_SETFOCUS消息,我不希望WH_MSGFILTER挂钩看到它们,但我不确定。

您应该知道,如果您打算吃WM_SETFOCUS消息,这不会阻止将焦点设置到窗口。

无论您遇到什么问题,Windows挂钩都不是最佳解决方案。如果你对你想要做的事情更具体,我们可能会更有帮助。

相关问题