hook钩子 HOOK钩子怎么用、专业人士来.
1, HOOK钩子怎么用、专业人士来.
钩子函数属于回调函数的一个特例。钩子就是在正常的处理之前先获取该消息,并对该消息进行处理,钩子是有优先级的,类似与栈,最后注册的优先级最高。 钩子函数,举个例子吧,假设你设计了一个程序,它的关键模块是A模块,而A模块中的主要函数是a()函数, 由于这个模块会因为软件的升级需要更新一些功能,而你更新功能的时候又不希望A模块被完全的替换,这时可以采用这样的策略。 在A模块中定义一个函数指针,void(*a)(void); 在调用a()函数的地方使用这样的语句: if(a) a(); 在B模块中实现具体的功能,并且在B模块初始化的时候讲外部定义的函数指针a赋初值,这样当a模块需要更新的时候只要改变B模块中的定义就可以了。 归纳一下:钩子函数就是在真正的模块中只是一个函数指针,而这个指针的赋值是再其它模块中实现的。
2, 系统钩子是什么??
从字面上理解,钩子就是想钩住些东西,在程序里可以利用钩子提前处理些Windows消息。 例子:有一个Form,Form里有个TextBox,我们想让用户在TextBox里输入的时候,不管敲键盘的哪个键,TextBox里显示的始终为“A”,这时我们就可以利用钩子监听键盘消息,先往Windows的钩子链表中加入一个自己写的钩子监听键盘消息,只要一按下键盘就会产生一个键盘消息,我们的钩子在这个消息传到TextBox之前先截获它,让TextBox显示一个“A”,之后结束这个消息,这样TextBox得到的总是“A”。 消息截获顺序:既然是截获消息,总要有先有后,钩子是按加入到钩子链表的顺序决定消息截获顺序。就是说最后加入到链表的钩子最先得到消息。 截获范围:钩子分为线程钩子和全局钩子,线程钩子只能截获本线程的消息,全局钩子可以截获整个系统消息。我认为应该尽量使用线程钩子,全局钩子如果使用不当可能会影响到其他程序
3, 安装全局钩子和HOOK有什么区别?
WINDOW下可进行挂接的过滤函数有WH_CALLWNDPROC,WH_CBT ,WH_DEBUG,WH_GETMESSAGE ,WH_HARDWARE ,WH_JOURNALPLAYBACK ,WH_JOURNALRECORD ,WH_MOUSE ,WH_MSGFILTER ,WH_SYSMSGFILTER ,WH_KEYBOARD键盘过滤函数 WH_KEYBOARD 是最常用最有用。利用函数SetWindowsHookEx()将其挂接在函数链首。拦+截到消息是否传递给函 数链的下一个函数是由每个具体函数功能确定,用API函数的CallNextHookEx()来传递。挂接函数是全局的,那么必须将其放在一个.DLL 动态链接库中。键盘挂钩函数为例:int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam) 其中KeyboardProc为定义挂接函数名,该函数必须在模块定义文件中利用 EXPORTS命 令进行说明;nCode决定挂接函数是否对当前消息进行处理;wParam和lParam为具体 的消息内容。卸钩 调用一次 UnhookWindowsHookEx(iProc)动态链接库调用有3种方法。1.在DEF定义文件中直接用函数名或序号说明: EXPORTS WEP @1 RESIDENTNAME InitHooksDll @2 InstallFilter @3 KeyboardProc @4 用序号说明格式为:链接库名.函数名(如本例中说明方法为KEYDLL.KeyboardProc)。2.在应用程序中利用函数直接调用: 首先在应用程序中利用LoadLibrary(LPSTR "链接库名")将动态链接库装入,并取得 装载库模块句柄hInst,然后直接利用GetProcAddress(HINSTANCE hInst,LPSTR "函 数过程名")获取函数地址,然后直接调用该地址即可,程序结束前利用函数 FreeLibrary( )释放装入的动态链接库即可。3.利用输入库.LIB方法 利用IMPLIB.EXE程序在建立动态链接库的同时建立相应的输入库.LIB,然后直接在 项目文件中增加该输入库。打字 太麻烦了,不写了。。。。
名词解释
WH
Wh一般表示新西兰毛利语的一个字母,代表着/f/音。英文中,其表示简写,如White House。
函数
函数(function)在数学中为两不为空集的集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素。 其定义通常分为传统定义和近代定义,前者从运动变化的观点出发,而后者从集合、映射的观点出发。其近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示。函数概念含有三个要素:定义域A、值域C和对应法则f。