钩子函数的原理c/c++?钩子函数的钩子函数

2025-02-13 02:50:02 0

钩子函数的原理c/c++?钩子函数的钩子函数

本文目录

钩子函数的原理c/c++

我的个人理解: 钩子函数其实就是函数指针,系统或软件定义好一些钩子,而你来把这些钩子挂接起来!说白了就是有些动作系统需要针对不同的情况做不同的处理,此时就需要定义一个钩子。具体的操作由用户挂上的钩子函数实现.比如: #include “stdio.h“void (*g_say_func)(void);void regist_say( void (*pfunc)(void ) ){ g_say_func = pfunc;}void humen_say(){ printf(“hello world!!!\n“);}void dog_say(){ printf(“wo wo !!!\n“);}void cat_say(){ printf(“miao miao!!!“);}void say_hello(){ g_say_func();}void main(){ regist_say(dog_say); //注册钩子函数 say_hello();}以上纯粹是个人理解!

钩子函数的钩子函数

一共有两种类型的钩子:局部的和远程的。局部钩子仅钩挂您自己进程的事件。远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种:钩子分两种, 一种是系统级的全局钩子; 一种是线程级的钩子.全局钩子函数需要定义在 DLL 中, 线程级的钩子开始比较简单.其实钩子函数就三个:设置钩子: SetWindowsHookEx释放钩子: UnhookWindowsHookEx继续钩子: CallNextHookEx在线程级的钩子中经常用到 GetCurrentThreadID 函数来获取当前线程的 ID

什么是钩子函数

WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。一共有两种类型的钩子:局部的和远程的。 局部钩子仅钩挂您自己进程的事件。 远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种: 基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。 系统范围的 将捕捉系统中所有进程将发生的事件消息。 当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。钩子一共有14种,以下是它们被调用的时机: WH_CALLWNDPROC 当调用SendMessage时 WH_CALLWNDPROCRET 当SendMessage的调用返回时 WH_GETMESSAGE 当调用GetMessage 或 PeekMessage时 WH_KEYBOARD 当调用GetMessage 或 PeekMessage 来从消息队列中查询WM_KEYUP 或 WM_KEYDOWN 消息时 WH_MOUSE 当调用GetMessage 或 PeekMessage 来从消息队列中查询鼠标事件消息时 WH_HARDWARE 当调用GetMessage 或 PeekMessage 来从消息队列种查询非鼠标、键盘消息时 WH_MSGFILTER 当对话框、菜单或滚动条要处理一个消息时。该钩子是局部的。它时为那些有自己的消息处理过程的控件对象设计的。 WH_SYSMSGFILTER 和WH_MSGFILTER一样,只不过是系统范围的 WH_JOURNALRECORD 当WINDOWS从硬件队列中获得消息时 WH_JOURNALPLAYBACK 当一个事件从系统的硬件输入队列中被请求时 WH_SHELL 当关于WINDOWS外壳事件发生时,譬如任务条需要重画它的按钮. WH_CBT 当基于计算机的训练(CBT)事件发生时 WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的应用程序很少使用 WH_DEBUG 用来给钩子函数除错 附:如何使用钩子函数(接收到字母A按下时,窗体由最小化弹出的完整的代码)Public Declare Function CallNextHookEx Lib “user32“ _(ByVal hHook As Long, _ByVal nCode As Long, _ByVal wParam As Long, _ByVal lParam As Long) As Long Public Declare Function UnhookWindowsHookEx Lib “user32“ _(ByVal hHook As Long) As Long Public Declare Function SetWindowsHookEx Lib “user32“ _Alias “SetWindowsHookExA“ _(ByVal idHook As Long, _ByVal lpfn As Long, _ByVal hmod As Long, _ByVal dwThreadId As Long) As Long Public Const WH_KEYBOARD = 2 Public Const KEY_WINSTART = 91Public Const KEY_WINMENU = 93 Global hHook As Long Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As LongIf nCode 》= 0 ThenIf wParam = KEY_WINMENU Or wParam = KEY_WINSTART ThenIf (lParam And &HC0000000) = 0 ThenMsgBox ““, , ““KeyboardProc = 1Exit FunctionEnd IfEnd IfEnd IfKeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)End Function Option Explicit Private Sub Command1_Click()form2.Show 1 End Sub Private Sub form_Load()hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID)Me.ShowEnd Sub Private Sub form_Unload(Cancel As Integer)Call UnhookWindowsHookEx(hHook)End Sub

JS钩子函数与回调函数区别

在消息处理机制中必不可少的一组CP,即回调和钩子。

钩子的概念源于Windows的消息处理机制,通过设置钩子,应用程序可以对所有的消息事件进行拦截,然后执行钩子函数,对消息进行想要的处理方式。

接下来是一段js代码,主要用于给btn设置点击的钩子函数

let btn = document.getElementById(“btn“);btn.onclick = () =》 {    console.log(“i’m a hook“);}

钩子是在捕获消息的时候立即执行钩子函数。

下面是一段给btn添加click的监听器。

btn.addEventListener(“click“,() =》{    console.log(this.onclick);//undefined});

这是给btn绑定了一个监听器,后面那个函数是它的回调函数,因为消息捕获的过程我们并不能参与,而在捕获执行完毕的时候,回调函数才会执行,我们可以把对消息的处理写在回调函数里。

js由于自身的特殊性(单线程),因而在代码里充满各式各样的异步操作,因此回调函数也是铺天盖地,上面的两段代码都是异步的。

回调函数和钩子函数的区别 根本上,他们都是为了捕获消息而生的,但是钩子函数在捕获消息的第一时间就会执行,而回调函数是在整个捕获过程结束时,最后一个被执行的。

回调函数其实就是调用者把回调函数的函数指针传递给调用函数,当调用函数执行完毕时,通过函数指针来调用回调函数。

钩子函数有多少种

应该分为 消息钩子和API/地址钩子,API/地址钩子又可以细分为 inline,IAT,SSDT等,参考bbs.pediy.com

钩子函数的原理c/c++?钩子函数的钩子函数

本文编辑:admin
钩子函数函数 ,c

本文相关文章:


什么叫函数返回为什么要返回?vb中经常提到的“返回”是什么意思

什么叫函数返回为什么要返回?vb中经常提到的“返回”是什么意思

本文目录什么叫函数返回为什么要返回vb中经常提到的“返回”是什么意思简单!!application.getAttribute()返回什么类型PPT怎么在设置超链接之后返回到原来的页面啊什么叫函数返回为什么要返回函数返回即指返回值,返回值是一

2025年4月1日 12:30

正弦函数公式?正弦函数是什么函数

正弦函数公式?正弦函数是什么函数

本文目录正弦函数公式正弦函数是什么函数正弦函数的概念正弦函数的性质是什么正弦函数公式是什么正弦函数是什么正弦函数的定义正弦函数公式sin(pi/2-a)=cosa;cos(pi/2-a)=sina(即:奇变偶不变,符号看象限)sin(pi/

2025年3月31日 21:20

settimeout函数(如何通俗的解释递归、闭包、回调、自调用函数等,这些情况之间有哪些区别和联系)

settimeout函数(如何通俗的解释递归、闭包、回调、自调用函数等,这些情况之间有哪些区别和联系)

本文目录如何通俗的解释递归、闭包、回调、自调用函数等,这些情况之间有哪些区别和联系js中存在并发执行吗如何通俗的解释递归、闭包、回调、自调用函数等,这些情况之间有哪些区别和联系你好,很高兴可以为你解答,希望本次解答可以帮助你更好的学习web

2025年3月29日 07:10

excel里lenb len(excel长度函数)

excel里lenb len(excel长度函数)

本文目录excel长度函数Excel 中LEN是什么意思在excel中lenb函数有什么作用Excel中的函数WPS表格中LEN与LENB函数应用问题EXCEL函数LEFT等于空白,人都疯了LENB和LEN值都是一样的,怎么回事win7系统

2025年3月26日 05:20

index函数怎么用match(比VLOOKUP函数好用10倍的函数Index+match函数怎么用)

index函数怎么用match(比VLOOKUP函数好用10倍的函数Index+match函数怎么用)

本文目录比VLOOKUP函数好用10倍的函数Index+match函数怎么用在Excel里,如何用index筛选不同工作表里的相同内容在Excel中match和index函数如何将两个工作表中的数据进行匹配比VLOOKUP函数好用10倍的函

2025年3月21日 08:00

sumproduct多条件不重复计数(excel中用什么函数能计算特定条件下某一列的不重复的个数)

sumproduct多条件不重复计数(excel中用什么函数能计算特定条件下某一列的不重复的个数)

本文目录excel中用什么函数能计算特定条件下某一列的不重复的个数countifs多条件不重复如何计数excel多条件计算不重复数据个数如何用SUMPRODUCT函数计算出A列满足条件下,B列的不重复项的个数excel 单列多条件 求不重复

2025年3月18日 19:00

复变函数与积分变换第三版(自学复变函数用什么书)

复变函数与积分变换第三版(自学复变函数用什么书)

本文目录自学复变函数用什么书求《复变函数与积分变换》(江西高校出版社)课后习题答案,要详细过程的求电子版《复变函数与积分变换》华中科技大学 第三版 复变函数与积分变换(江西高校出版社)课后习题答案自学复变函数用什么书国产:方企勤《复变函数教

2025年3月18日 16:30

什么是对勾函数?什么是对勾函数求其定义,特点及解法,谢了!

什么是对勾函数?什么是对勾函数求其定义,特点及解法,谢了!

本文目录什么是对勾函数什么是对勾函数求其定义,特点及解法,谢了!请问什么是对勾函数对勾函数是什么什么是对勾函数形如 y = ax + b/x  (x≠0)的函数为对勾函数,它的图像象对号似的,所以形象地称它为对勾函数。当a=b=1时:y =

2025年3月17日 21:50

round函数(请问ROUND函数是什么意思比如ROUND(SUM(D1*8)*2))

round函数(请问ROUND函数是什么意思比如ROUND(SUM(D1*8)*2))

本文目录请问ROUND函数是什么意思比如ROUND(SUM(D1*8)*2)Excel中round函数怎么用round函数是什么意思函数round是什么函数round是什么函数,用于计算什么,具体公式在EXCEL中ROUND这个函数怎么用r

2025年3月15日 09:50

sumifs函数(哪位大神能帮我详细概括下,SUMIF函数和SUMIFS函数的区别如何)

sumifs函数(哪位大神能帮我详细概括下,SUMIF函数和SUMIFS函数的区别如何)

本文目录哪位大神能帮我详细概括下,SUMIF函数和SUMIFS函数的区别如何如何使用excel中的公式SUMIFS,求实例哪位大神能帮我详细概括下,SUMIF函数和SUMIFS函数的区别如何SUMIF函数和SUMIFS函数都属于SUM求和函

2025年3月1日 08:40

三角函数值表(数学中常用三角函数值说下(全点))

三角函数值表(数学中常用三角函数值说下(全点))

本文目录数学中常用三角函数值说下(全点)三角函数表三角函数值表内容是什么三角函数值表,要表啊特殊角的三角函数值表有哪些完整的三角函数值表在哪看高中生必背哪些三角函数值高中三角函数公式表高中物理中 重要的三角函数高中的三角函数重要公式有哪些数

2025年2月27日 02:10

replace函数(excel里的这个函数REPLACE 怎么用具体参数怎么设置呢)

replace函数(excel里的这个函数REPLACE 怎么用具体参数怎么设置呢)

本文目录excel里的这个函数REPLACE 怎么用具体参数怎么设置呢replace函数如何使用(详细问题在注视提出)excel2007如何 使用REPLACE函数replace函数的作用replace是什么函数replace函数用法能教我

2025年2月18日 04:50

函数的单调性ppt课件(函数 的概念及单调性)

函数的单调性ppt课件(函数 的概念及单调性)

本文目录函数 的概念及单调性什么是函数的单调性函数的基本性质——单调性与最大(小)值函数单调性的定义函数 的概念及单调性函数(function)表示每个输入值对应唯一输出值的一种对应关系。函数f中对应输入值的输出值x的标准符号为f(x)。包

2025年2月17日 12:50

指数函数课件(几何画板怎么画指数函数的动态图)

指数函数课件(几何画板怎么画指数函数的动态图)

本文目录几何画板怎么画指数函数的动态图用几何画板怎么画“指数函数”的动态图指数函数图像和性质 怎么做课件几何画板画指数函数的动态图怎么画几何画板怎么画指数函数的动态图指数函数曲线指数函数课件模板试图应用数形结合的思想方法,用几何画板设计参数

2025年2月12日 21:50

更多文章:


js是什么软件(解释js ajax和cgi各是什么工具在b/s中起什么作用)

js是什么软件(解释js ajax和cgi各是什么工具在b/s中起什么作用)

本文目录解释js ajax和cgi各是什么工具在b/s中起什么作用javascript用什么软件JS脚本语言是干什么用的JS文件是做什么用的JS都可以做什么.js是什么文件格式解释js ajax和cgi各是什么工具在b/s中起什么作用名词解

2025年2月14日 07:00

winform刷新窗体数据(winform中一个窗口关闭后在主窗口上自动刷新显示的数据谢谢)

winform刷新窗体数据(winform中一个窗口关闭后在主窗口上自动刷新显示的数据谢谢)

本文目录winform中一个窗口关闭后在主窗口上自动刷新显示的数据谢谢C# winform怎么实现子窗体关闭时刷新父窗体数据winform中数据库更新后如何让窗体自动刷新大概有100个客户端,如果用Timer,那效率太低了,请高手指教win

2025年2月11日 13:40

什么是内卷最佳解释(内卷的最通俗解释)

什么是内卷最佳解释(内卷的最通俗解释)

本文目录内卷的最通俗解释内卷的定义是什么如何通俗易懂地解释内卷是什么意思“内卷”是什么意思网络用语内卷是什么意思内卷的最通俗解释1、内卷比较通俗的解释就是:把自己困在困境之中生活,没有更多的生存空间,带有一定的负面消极情绪2、内卷(invo

2025年3月22日 16:40

php空间推荐(推荐我一个php空间 可以在线解压的)

php空间推荐(推荐我一个php空间 可以在线解压的)

本文目录推荐我一个php空间 可以在线解压的推荐免费PHP空间请推荐谁家的php主机空间服务技术比较强推荐我一个php空间 可以在线解压的PHP在线解压缩工具,非cPanel用户必备2007-06-10 07:17终于找到几款好用的php在

2025年3月17日 09:00

society of actuaries(数学系跨专业考研)

society of actuaries(数学系跨专业考研)

本文目录数学系跨专业考研society of actuaries考试通过率数学系跨专业考研保险精算师,这个注册认证是数学和经济学的结合,如果你选择精算的研究生,对于你非常合适,现在的保险精算师考试可是很热的啊,如果你考上了保险精算师,毕业后

2025年2月25日 10:20

boarding是什么意思啊(boarding check是什么意思啊)

boarding是什么意思啊(boarding check是什么意思啊)

本文目录boarding check是什么意思啊“boarding”是什么意思flowboarding是什么运动,也叫flowriding“Boarding Time”的意思是什么boarding check是什么意思啊同学你好,很高兴为您

2025年3月7日 14:20

asf格式文件怎么打开?如何打开.asf文件

asf格式文件怎么打开?如何打开.asf文件

本文目录asf格式文件怎么打开如何打开.asf文件asf格式文件怎么打开.asf文件用Windows Media Player就可以打开,.asf文件是微软自己的媒体格式。打开.asf文件方法如下:1、右键.asf文件,选择打开方式。2、在

2025年2月27日 06:30

position属性relative(position定位属性中absolute和relative的区别)

position属性relative(position定位属性中absolute和relative的区别)

本文目录position定位属性中absolute和relative的区别position的值relative和absolute定位原点是position定位属性中absolute和relative的区别bsolute指绝对位置,就是说设定

2025年2月23日 00:00

pilot音标(英语China’s largest pilot怎么翻译)

pilot音标(英语China’s largest pilot怎么翻译)

本文目录英语China’s largest pilot怎么翻译1 what’s she like 是什么意思 2 pilot 有几种发音 分别是什么pilot和university中的i读音相同吗英语单词pilot读法pilot的音标宇航员

2025年3月31日 21:00

“都是”是什么意思?都的意思是什么

“都是”是什么意思?都的意思是什么

本文目录“都是”是什么意思都的意思是什么都是什么“都是”是什么意思意思是全是,完全是或者表示全部包括在内。读音:dōu shì示例:幸福都是奋斗出来的。把蓝图变为现实,将改革进行到底,无不呼唤不驰于空想、不骛于虚声的奋斗精神,无不需要一步一

2025年2月21日 01:00

javascript是一种什么语言(javascript属于什么样的语言)

javascript是一种什么语言(javascript属于什么样的语言)

本文目录javascript属于什么样的语言javascript是啥JavaScript是什么类型语言javascript是什么语言javascript属于什么样的语言Javascript是一种由Netscape的LiveScript发展而

2025年4月4日 09:40

ability是什么意思(Ability什么意思)

ability是什么意思(Ability什么意思)

本文目录Ability什么意思ability的用法ability是什么意思“ability”是什么意思ability什么意思Ability什么意思能力的意思。ability英   n.能力;才能;本领;才智1、动词 + abilityhav

2025年3月2日 06:20

camera(camera是什么意思翻译)

camera(camera是什么意思翻译)

本文目录camera是什么意思翻译CAMERA是什么意思camera是什么意思英语单词camera是什么意思camera 的意思是什么怎么读camera英语翻译是什么意思Hover Camera该不该买HoverCamera小黑侠跟拍折叠智

2025年3月5日 22:10

ionic vue(大前端学习)

ionic vue(大前端学习)

本文目录大前端学习如何用vue.js和ionic搭建前端框架大前端学习学习前端的知识图,分为8个阶段,前端的前景是很不错的,如果学的可以,找到工作是没有问题的,希望你能找到好的工作。前端学什么如何用vue.js和ionic搭建前端框架前端可

2025年3月25日 13:40

史上最贵的域名cars.com价值8.7亿美金,大家觉得cars.vip怎么样?cars.com和cars.vip这两个域名哪个好

史上最贵的域名cars.com价值8.7亿美金,大家觉得cars.vip怎么样?cars.com和cars.vip这两个域名哪个好

本文目录史上最贵的域名cars.com价值8.7亿美金,大家觉得cars.vip怎么样cars.com和cars.vip这两个域名哪个好英语里的伤疤Scabs怎么念史上最贵的域名cars.com价值8.7亿美金,大家觉得cars.vip怎么

2025年3月17日 02:50

最基本的表格制作方法(如何制作一张表格)

最基本的表格制作方法(如何制作一张表格)

本文目录如何制作一张表格表格的制作方法电脑word表格制作教程如何制作一张表格Microsoft Word 提供了几种创建表格 (表格:表格由一行或多行单元格组成,用于显示数字和其他项以便快速引用和分析。表格中的项被组织为行和列。)的方法。

2025年3月24日 15:20

webapi测试(webapi 返回类型到底应该是什么才合适,这是个问题)

webapi测试(webapi 返回类型到底应该是什么才合适,这是个问题)

本文目录webapi 返回类型到底应该是什么才合适,这是个问题如何测试webapi controller如何让webapi只接受ajax请求如何使用web api测试工具siege和ab的post方法来发送json数据 / 蓝讯web测试,

2025年3月3日 13:20

数据库删除语句(如何删除数据库中的一行)

数据库删除语句(如何删除数据库中的一行)

本文目录如何删除数据库中的一行mysql中怎么删除一个数据库如何删除数据库中的一行删除语句的基本结构为DELETE FROM 表名称 WHERE 列名称 = 值如果筛选条件多余一列的时候可以使用 AND或OR将条件连接起来例如有一张Pers

2025年3月15日 03:00

jqgrid隐藏列(jqgrid控制列的隐藏显示,怎么使table的宽度不变)

jqgrid隐藏列(jqgrid控制列的隐藏显示,怎么使table的宽度不变)

本文目录jqgrid控制列的隐藏显示,怎么使table的宽度不变在js中怎么改变jqgrid行数据jqgrid怎么用js改表格数据如何利用jqGrid表格插件显示和隐藏表格字段搭建jqgrid框架,但是页面什么都不显示, 哪里出错了jqgr

2025年2月13日 21:30

equalsandhashcode(hashcode和equals的关系是什么)

equalsandhashcode(hashcode和equals的关系是什么)

本文目录hashcode和equals的关系是什么equals和hashcode的区别,hashcode的作用hashcode和equals,怎么理解这段话,最好举例hashcode和equals的关系是什么hashcode和equals的

2025年2月18日 19:20

近期文章

folderbrowserdialog(folderBrowserDialog1 的使用C#)
2025-04-05 01:30:01
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索