Windows 窗户挂钩-它们是如何工作的?

Windows 窗户挂钩-它们是如何工作的?,windows,Windows,我不知道窗口挂钩在“系统级”是如何工作的。MSDN仅简要介绍了正在发生的事情: 钩子是系统消息处理机制中的一个点,其中 应用程序可以安装一个子例程来监视中的消息流量 系统会在某些类型的消息到达服务器之前对其进行处理 目标窗口程序 我的最佳猜测如下: 在将每条消息添加到窗口的消息队列之前,它将首先将消息发送到全局/本地钩子,根据钩子过程的不同,全局/本地钩子可能会执行某些操作。在所有全局钩子和本地钩子之后,消息最终添加到窗口消息队列 然而,MSDN表示,对于某些类型的钩子,它将监视事件,通知等

我不知道窗口挂钩在“系统级”是如何工作的。MSDN仅简要介绍了正在发生的事情:

钩子是系统消息处理机制中的一个点,其中 应用程序可以安装一个子例程来监视中的消息流量 系统会在某些类型的消息到达服务器之前对其进行处理 目标窗口程序

我的最佳猜测如下:

在将每条消息添加到窗口的消息队列之前,它将首先将消息发送到全局/本地钩子,根据钩子过程的不同,全局/本地钩子可能会执行某些操作。在所有全局钩子和本地钩子之后,消息最终添加到窗口消息队列

然而,MSDN表示,对于某些类型的钩子,它将监视
事件
通知

例如
WH\u MOUSE\u LL
hook:

安装用于监视低级鼠标的钩子过程 输入事件。有关更多信息,请参见LowLevel MouseProc挂钩 程序

当他们说
事件
时,我们是在谈论窗口消息,还是他们的意思是别的


我全错了吗?

是的,这是windows消息的一种机制,您可以在这些数据(消息)到达目标窗口过程(消息循环)之前对其进行处理


如果您想钩住其他进程窗口,只需在DLL中执行此操作,并使用DLL注入将您的库注入其他进程。

手绘图图像的附加样式点。以下是一些说明,许多钩子都是基于消息的。但不是你所说的钩子,它实际上是由一个“事件”触发的。它在Windows创建消息并将其放入具有焦点的窗口的消息队列之前运行。与WH_MOUSE相比,WH_MOUSE是一个全局钩子,在应用程序调用Get/peek message时运行,即将从消息队列中检索鼠标消息。这实际上是由一条消息触发的。@OrhanCinar,很棒的文章!谢谢:)@HansPassant,我有点困惑。。。您是说全局钩子是在应用程序级别创建的——然而Orhan Cinar链接到的文章说,全局钩子将在系统级别执行。另一侧的本地钩子将在应用程序级别执行。