2010-01-26 143 views
1

我想在所有当前窗口上捕获WM_SETFOCUS消息。 最好的办法是做什么。陷阱WM_SETFOCUS消息

我觉得SetWidnwosHookEx可以用于此目的。它可以与WH_CALLWNDPROC或WH_MSGFILTER一起使用吗?

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

回答

1

是的,你可以在安装钩子的同一个DLL钩PROC。我相信,你在谈论的要求与你在另一个进程中设置窗口钩子有关。

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

HCBT_SETFOCUS
窗口是要接收键盘焦点。

1

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

一个WH_CALLWNDPROC钩子应该看到WM_SETFOCUS消息,我不希望一个WH_MSGFILTER挂钩,看到他们,但我不知道。

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

无论你的问题是,一个窗口钩子是很少的最佳解决方案。如果你对你想要做的更具体,我们可能会更有帮助。

+0

虽然我从来没有亲自使用它,关注CBTProc文档状态可以停止对HCBT_SETFOCUS N-代码。我同意,虽然它似乎有点霸道,并不是像平板电脑输入面板的工作方式。 – Josh 2010-01-26 09:37:44

+0

是的,CBT挂钩是一种特殊情况。他们是为了“基于计算机的培训”,所以理论上你想让计算机有时假装成为用户,并监视用户的行为 - 他们基本上把整个系统变成了一种单线程模式,然后允许钩子严重地弄乱东西。 – 2010-01-26 09:56:46