我想在所有当前窗口上捕获WM_SETFOCUS消息。 最好的方法是什么?
我认为SetWindowsHookEx可以用于此目的。它可以与WH_CALLWNDPROC或WH_MSGFILTER一起使用吗?
另外,它提到钩子程序必须在单独的DLL中。是否需要。 我可以在安装钩子的同一个DLL中没有钩子程序。
答案 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挂钩都不是最佳解决方案。如果你对你想要做的事情更具体,我们可能会更有帮助。