欢迎来到朵拉利品网
知识中心
资讯
  • 资讯
  • 产品
  • 供应商
您的位置: 朵拉利品网 >  知识中心 > 钩子和回调 回调函数 钩子函数 有什么区别
钩子和回调 回调函数 钩子函数 有什么区别
2020-05-06 10:20:19 来源:朵拉利品网

1, 回调函数 钩子函数 有什么区别



问得不清楚,所以不懂怎么回答这个区别。
所谓回调函数,一般就是把函数的地址作为参数传进去,让调用的函数在内部可以调用这个函数。
例子:
void CALLBACK fun(){...} 这是一个函数,回调函数
void AAA(int a, Fun* p); 这是一个普通函数,但第二个参数是fun
AAA(5, fun);
钩子函数,严格算起来,也算是回调函数的一种。但钩子函数是针对的截取的,当你使用了钩子之后,每当触发到相对应的消息,系统就会先“执行你写的回调函数”。
即原本是:系统-->;目标函数
使用钩子就变成:系统-->;你写的回调函数-->;目标函数
大概原理就是这样子。就不知道你对函数与钩子的了解水平如何了

2, 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由于自身的特殊性(单线程),因而在代码里充满各式各样的异步操作,因此回调函数也是铺天盖地,上面的两段代码都是异步的。
回调函数和钩子函数的区别
根本上,他们都是为了捕获消息而生的,但是钩子函数在捕获消息的第一时间就会执行,而回调函数是在整个捕获过程结束时,最后一个被执行的。
回调函数其实就是调用者把回调函数的函数指针传递给调用函数,当调用函数执行完毕时,通过函数指针来调用回调函数。

3, 关于键盘钩子的回调函数,高手进。。。。



HHOOK SetWindowsHookEx(
int idHook, // 安装钩子类型
HOOKPROC lpfn, // 回调函数首地址
HINSTANCE hMod, // 调用模块的句柄
DWORD dwThreadId // 需要挂钩的线程ID);
1.回调函数类型和第一个参数有关,但是所有的回调函数格式都是一样的。具体参数用法不一样而已。
2.第2个参数不需要解释了吧?回调函数取地址就行了。
比如&KeyboardProc//键盘钩子回调函数
3.第三个参数是一个句柄,这句柄包含了DLL的句柄。要注意2点,如果第四个参数指定的线程ID是当前进程所创建的,还有,这个钩子程序在当前进程相关联的代码创建一个线程,那么这个参数必须设置为空。
4.这个参数,是指定你需要挂钩的线程ID号。
这个ID一般可以是:GetWindowThreadProcessId 函数的返回值。
更详细的建议你参考下MSDN。
英文不行? ------学啊

名词解释


函数

函数(function)在数学中为两不为空集的集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素。 其定义通常分为传统定义和近代定义,前者从运动变化的观点出发,而后者从集合、映射的观点出发。其近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示。函数概念含有三个要素:定义域A、值域C和对应法则f。

钩子

钩子,草本植物。钩子为蔷薇科悬钩子属的植物。分布於朝鲜、北欧、俄罗斯、蒙古以及中国大陆的吉林、辽宁、黑龙江等地,生长於海拔1,200米的地区,多生於侧坡、林下以及沟旁,尚未由人工引种栽培。

btn

BTNl是Flash中按钮实例(Button)的注释名。