窗钩 – 它们是如何工作的?

我不知道窗钩是如何在“系统级”工作的。 MSDN只是非常简单地触及到正在发生的事情:

挂钩是系统消息处理机制中的一个要点,应用程序可以安装子例程来监视系统中的消息stream量,并在达到目标窗口过程之前处理某些types的消息。

我最好的猜测是如下所示:

在这里输入图像说明

在将每条消息添加到消息队列中之前,它将首先将消息发送到全局/本地钩子,这可能会执行某些操作,具体取决于钩子过程。 在所有全局钩子和本地钩子之后,消息最终被添加到窗口消息队列中。

但是,MSDN表示,对于某些types的钩子,它将监视eventsnotifications等。

一个例子是WH_MOUSE_LL钩子:

安装监视低级别鼠标input事件的挂钩程序。 有关更多信息,请参阅LowLevelMouseProc挂钩过程。

当他们说events ,我们是在说窗口消息,还是其他的意思?

我都错了吗?

是的,这是一个窗口消息的机制,你可以在到达目标窗口过程(消息循环)之前处理这些数据(消息)。

如果你想挂钩其他进程窗口,你可以简单地在DLL中做到这一点,并使用DLL注入注入你的库到其他进程。