HOOK(钩子)函数
安装、卸载钩子的相关函数
钩子类型 按功能分:
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以监视发送到窗口过程的消息
3、WH_DEBUG 调试钩子
4、WH_FOREGROUNDIDLE 当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE
5、WH_JOURNALRECORD 监视和记录输入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件
7、WH_KEYBOARD 键盘钩子
9、WH_KEYBOARD_LL 低层键盘钩子
10、WH_MOUSE 鼠标钩子
11、WH_MOUSE_LL 底层鼠标钩子
12、WH_SHELL 外壳钩子
13、WH_MSGFILTER 和WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等
钩子的作用范围
++++++++++++++++
一共有两种范围(类型)的钩子:局部的和远程的。
一、局部钩子仅钩挂您自己进程的事件。
二、远程的钩子还可以将钩挂其它进程发生的事件。
远程的钩子又有两种:
1、基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可
以用来观察其它进程中的某一特定线程将发生的事件。
2、系统范围的 将捕捉系统中所有进程将发生的事件消息。
安装钩子:
实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,这个函数的原型是 HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) 第一个参数:idHook表示钩子类型,它是和钩子函数类型一一对应的。如,WH_KEYBOARD,WH_MOUSE。 第二个参数:Lpfn是钩子函数的地址。 第三个参数:HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 (系统钩子必须在DLL中) 第四个参数:dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。其中,全局钩子函数必须包含在DLL(动态链接库)中,而线程专用钩子还可以包含在可执行文件中。得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数CallNextHookEx()来传递它。钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止该消息的传递。 执行SetWindowsHookEx(),会返回所安装的钩子句柄。
卸载钩子
调用函数 BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子,其参数hhk就是执行SetWindowsHookEx()后返回的所安装的钩子的句柄。
钩子[回调]函数
钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,比如监听键盘的事件,系统会调用钩子函数进行处理。一般为下: LRESULT WINAPI MyHookProc(int nCode,WPARAM wParam,LPARAM lParam) 参数wParam和 lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键值等。nCode包含有关消息本身的信息,比如是否从消息队列中移出。
注:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
HOOK(钩子)函数的更多相关文章
- Flask初学者:g对象,hook钩子函数
Flask的g对象 作用:g可以可以看作是单词global的缩写,使用“from flask import g”导入,g对象的作用是保存一些在一次请求中多个地方的都需要用到的数据,这些数据可能在用到的 ...
- 让你轻松掌握 Python 中的 Hook 钩子函数
1. 什么是Hook 经常会听到钩子函数(hook function)这个概念,最近在看目标检测开源框架mmdetection,里面也出现大量Hook的编程方式,那到底什么是hook?hook的作用是 ...
- Vue源码后记-钩子函数
vue源码的马拉松跑完了,可以放松一下写点小东西,其实源码讲20节都讲不完,跳了好多地方. 本人技术有限,无法跟大神一样,模拟vue手把手搭建一个MVVM框架,然后再分析原理,只能以门外汉的姿态简单过 ...
- Netfilter 之 钩子函数注册
通过注册流程代码的分析,能够明确钩子函数的注册流程,理解存储钩子函数的数据结构,如下图(点击图片可查看原图): 废话不多说,开始分析: nf_hook_ops是注册的钩子函数的核心结构,字段含义如下所 ...
- HOOK钩子 - 钩子函数说明
翻译参考自MaybeHelios的blog: http://blog.csdn.net/maybehelios/ 通过SetWindowsHookEx方法安装钩子,该函数指定处理拦截消息的钩子函数(回 ...
- GET/POST/g和钩子函数(hook)
GET请求和POST请求: 1. get请求: * 使用场景:如果只对服务器获取数据,并没有对服务器产生任何影响,那么这时候使用get请求. * 传参:get请求传参是放在url中,并且是通过`?`的 ...
- Net实现钩子函数(Hook)以及通过SendMessage实现自动点击按钮和给文本框赋值
1.实现钩子函数 钩子(Hook)的实现需要三个主要的函数和一个委托 [DllImport("user32.dll", CharSet = CharSet.Auto, Callin ...
- Cypress系列(9)- Cypress 编写和组织测试用例篇 之 钩子函数Hook
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Hook 就是常说的钩子函数,在 pyt ...
- Hive Query生命周期 —— 钩子(Hook)函数篇
无论你通过哪种方式连接Hive(如Hive Cli.HiveServer2),一个HQL语句都要经过Driver的解析和执行,主要涉及HQL解析.编译.优化器处理.执行器执行四个方面. 以Hive目前 ...
- 【Mocha.js 101】钩子函数
前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...
随机推荐
- Julia语言:让高性能科学计算人人可用
Julia语言:让高性能科学计算人人可用要:一群科学家对现有计算工具感到不满:他们想要一套开源系统,有C的快速,Ruby的动态,Python的通用,R般在统计分析上得心应手,Perl的处理字符串处理, ...
- TreeMap与TreeSet
TreeMap与TreeSet TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素.实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来 ...
- C#编程总结
C#编程总结--总目录 多年的C#实战经历,希望通过一个系列课程对C#编程做系统总结. 总结过去,展望未来.新的一年,新的征程,新的开始! 希望我们在2014梦想成真,马到成功! 1.C#编程总结(一 ...
- const与readonly的区别
const与readonly 很像,都是将变量声明为只读,且在变量初始化后就不可改写.那么,const与readonly 这两个修饰符到底区别在什么地方呢?其实,这个牵扯出C#语言中两种不同的常量类型 ...
- 关于HTTP头标
对于HTTP中的头字段,我表示真的好麻烦,特找来一段资料共享.希望能对大家有用. HTTP的头域包括通用头,请求头,响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成.域名是大小写 ...
- 在一般处理文件中访问Session需要添加IRequiresSessionState
在IHttpHandler 使用Session 通常我们经常,通过session判定用户是否登录.还有一些临时的.重要的数据也尝尝存放在Session中. 在页面我们很容易的得到Session的值,但 ...
- 修改Ubuntu Server的分辨率
修改Ubuntu Server的分辨率,其实就是找到关键的文件,然后修改参数,重启一下,就可以看见效果了. 1.打开文件并修改参数 文件位置:/etc/default/grub 修改位置:GRUB_C ...
- linux内核数据结构之链表
linux内核数据结构之链表 1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该 ...
- [转]How WebKit’s Event Model Works
原文:https://homes.cs.washington.edu/~burg/projects/timelapse/articles/webkit-event-implementation/ Fi ...
- ASP.NET MVC 理解MVC模式
ASP.NET MVC 理解MVC模式 PS:MVC出来很久了,工作上一直没机会用,所以我也没去学.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各位园友的斧正. ...