现在的位置: 首页 > web前端 > 正文

什么是钩子函数

2020年07月20日 web前端 ⁄ 共 978字 ⁄ 字号 评论关闭

  钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。


  钩子函数作用


  在某种操作后弹出的关于钩子函数的界面


  在某种操作后弹出的关于钩子函数的界面


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


  钩子函数类型


  一共有两种类型的钩子:局部的和远程的。


  局部钩子仅钩挂您自己进程的事件。


  远程的钩子还可以将钩挂其它进程发生的事件。


  远程的钩子又有两种:


  钩子分两种,一种是系统级的全局钩子;一种是线程级的钩子.全局钩子函数需要定义在DLL中,线程级的钩子开始比较简单.


  其实钩子函数就三个:


  设置钩子:SetWindowsHookEx


  释放钩子:UnhookWindowsHookEx


  继续钩子:CallNextHookEx


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


  简介


  系统范围的将捕捉系统中所有进程将发生的事件消息。当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。


  特例


  当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。


  总之,钩子函数给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.