我不知道窗钩是如何在“系统级”工作的。 MSDN只是非常简单地触及到正在发生的事情:
挂钩是系统消息处理机制中的一个要点,应用程序可以安装子例程来监视系统中的消息stream量,并在达到目标窗口过程之前处理某些types的消息。
我最好的猜测是如下所示:
在将每条消息添加到消息队列中之前,它将首先将消息发送到全局/本地钩子,这可能会执行某些操作,具体取决于钩子过程。 在所有全局钩子和本地钩子之后,消息最终被添加到窗口消息队列中。
但是,MSDN表示,对于某些types的钩子,它将监视events
, notifications
等。
一个例子是WH_MOUSE_LL
钩子:
安装监视低级别鼠标input事件的挂钩程序。 有关更多信息,请参阅LowLevelMouseProc挂钩过程。
当他们说events
,我们是在说窗口消息,还是其他的意思?
我都错了吗?
是的,这是一个窗口消息的机制,你可以在到达目标窗口过程(消息循环)之前处理这些数据(消息)。
如果你想挂钩其他进程窗口,你可以简单地在DLL中做到这一点,并使用DLL注入注入你的库到其他进程。