1, 请教高手钩子函数的用法和作用
Windows的钩子函数分两种,一种是全局的,一种是线程的。全局的钩子函数可以捕获任何应用程序的消息,但必须是标准的DLL才能实现,VB做不了。VB可以实现线程的,就是当前应用程序的消息,这对鼠标消息的捕636f70797a6431333335346166捉有影响。 SetWindowsHookEx定义如下: 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 idHook是钩子类型,如WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。hmod用于全局钩子,VB要实现钩子,必须设为0。dwThreadId用于线程钩子VB中可以设置为App.ThreadID。lpfn为钩子函数,在VB中可以使用AddressOf获得钩子函数的地址。这个函数因为钩子类型不同而有所不同。如键盘钩子为: Public Function KeyboardProc(ByVal nCode As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long 如果Code不为0,钩子函数必须调用CallNextHookEx,将消息传递给下面的钩子。wParam和lParam不是按键。
2, 回调函数 钩子函数 有什么区别
问得不清楚,所以不懂怎么回答这个区别。所谓回调函数,一般就是把函数的地址作为参数传进去,让调用的函数在内部可以调用这个函数。例子:void CALLBACK fun(){...} 这是一个函数,回调函数void AAA(int a, Fun* p); 这是一个普通函数,但第二个参数是funAAA(5, fun); 钩子函数,严格算起来,也算是回调函数的一种。但钩子函数是针对的截取的,当你使用了钩子之后,每当触发到相对应的消息,系统就会先“执行你写的回调函数”。即原本是:系统-->;目标函数使用钩子就变成:系统-->;你写的回调函数-->;目标函数大概原理就是这样子。就不知道你对函数与钩子的了解水平如何了
3, 钩子函数的原理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!!!
");}void dog_say(){printf("wo wo !!!
");}void cat_say(){printf("miao miao!!!");}void say_hello(){g_say_func();}void main(){regist_say(dog_say); //注册钩子函数say_hello();}以上纯粹是个人理解!
名词解释
钩子
钩子,草本植物。钩子为蔷薇科悬钩子属的植物。分布於朝鲜、北欧、俄罗斯、蒙古以及中国大陆的吉林、辽宁、黑龙江等地,生长於海拔1,200米的地区,多生於侧坡、林下以及沟旁,尚未由人工引种栽培。
Long
long关键字表示一种整型,该类型根据下表显示的大小和范围存储值。类型 范围 大小 .NETFramework类型 long -2,147,483,648 to 2,147,483,647 有符号 32位整数 所占4个字节(Byte) long long -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 有符号 64位整数 System. Int32 所占8个字节(Byte)