Hook(钩子)函数

本文详细介绍了Windows钩子函数的概念,包括其作为Windows消息处理机制的重要组成部分,以及如何通过钩子函数来拦截和处理事件。文章还讨论了钩子的分类,如局部和远程钩子,并详细阐述了系统级全局钩子和线程级钩子的区别。同时,文中列举了设置、释放和继续钩子的关键函数,并解释了钩子子程的工作原理和如何在不同类型的钩子中传递消息。
摘要由CSDN通过智能技术生成

1.认识钩子函数

WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。


2.钩子的分类

(1)一共有两种钩子:局部的和远程的。

局部钩子仅挂钩自己进程的事件;远程钩子可以挂钩其他进程的事件。

(2)远程钩子又分为两种:系统级的全局钩子和线程级的钩子

全局钩子函数需要定义在DLL中,而线程级钩子比较简单。

3.钩子函数

其实钩子函数也就3个:

(1)设置钩子:SetWindowsHookEx

(2)释放钩子:UnhookWindowsHookEx

(3)继续钩子:CallNextHookEx

在线程级的钩子中经常用到 GetCurrentThreadID 函数来获取当前线程的 ID


(1) SetWindowsHookEx

HHOOK SetWindowsHookEx(
  int idHook,        // hook type(钩子类型,即它处理的消息类型  HOOKPROC lpfn,     // hook procedure(回调函数的地址)
  HINSTANCE hMod,    // handle to application instance(实例句柄,标识包含lpfn所指的子程的DLL  DWORD dwThreadId   // thread identifier(线程ID)
);
第一个参数为钩子的类型,钩子的类型一共还有14种,表示在什么时机调用钩子。下面会介绍。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值