java中钩子函数回调函数_回调函数和钩子函数的说明

java中钩⼦函数回调函数_回调函数和钩⼦函数的说明
雨水收集利用系统
回调函数:
回调函数是应⽤程序提供给Windows系统DLL或其它DLL调⽤的函数,⼀般⽤于截获消息、获取系统信息或处理异步事件。应⽤程序把回调函数的地址指针告诉DLL,⽽DLL在适当的时候会调⽤该函数。回调函数必须遵守事先规定好的参数格式和传递⽅式,否则DLL⼀调⽤它就会引起程序或系统的崩溃。通常情况下,回调函数采⽤标准WindowsAPI的调⽤⽅式,即__stdcall,当然,DLL编制者可以⾃⼰定义调⽤⽅式,但客户程序也必须遵守相同的规定。在__stdcall⽅式下,函数的参数按从右到左的顺序压⼊堆栈,除了明确指明是指针或引⽤外,参数都按值传递,函数返回之前⾃⼰负责把参数从堆栈中弹出。
简单的说就是回调函数函数不是系统定义的,⽽是应⽤程序⾃⼰定义的⼀个由系统来调⽤的函数,所以显然,它的参数必须按照约定来,即,参数是预先定义好的。
钩⼦函数:
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 ⽤来给钩⼦函数除错

本文发布于:2024-09-21 01:28:28,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/311117.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   事件   系统   回调   消息   进程
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议