欢迎来到天天文库
浏览记录
ID:40239741
大小:894.00 KB
页数:77页
时间:2019-07-28
《Windows系统编程 李晓黎 第11章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows系统编程实用教程授课教师:职务:第11章Windows钩子编程课程描述Windows应用程序是基于消息机制的。用户在执行各种操作时都会触发相应的消息,这些消息就像战争时期各方发送的电报,如果能截获敌方的电报,则无疑会在战场上取得先机。钩子就是这样一种机制,它可以在系统消息到达目标窗口之前将其截获,并可以为指定类型的消息指定一个消息处理函数。有了这种机制,就不难理解杀毒软件是如何在用户打开一个文件之前就提前知道,并对其进行扫描的;有些翻译软件又是如何知道用户鼠标停留位置的文字的。本章知
2、识点11.1钩子的概念和工作原理11.2安装和卸载钩子11.3键盘钩子的例子11.4HOOKAPI技术11.5进程保护器实例11.6改进进程保护器实例11.1钩子的概念和工作原理11.1.1什么是钩子11.1.2钩子的类型11.1.1什么是钩子钩子是Windows中可以拦截事件的一种机制。可以指定一个函数作为特定类型的被拦截事件的钩子过程。钩子过程可以对拦截的每个事件进行处理。1.钩子链2.钩子过程1.钩子链Windows支持许多不同类型的钩子,不同类型的钩子可以为消息处理机制的不同方面提供访问。
3、例如,使用WH_MOUSE钩子可以监视与鼠标操作相关的消息。系统为每个类型的钩子维护一个独立的钩子链,其中包含指向一组作为钩子过程的回调函数的指针。当与指定类型的钩子相关联的消息发生时,系统会把消息传送给钩子链中的相关钩子过程。2.钩子过程正如前面介绍的钩子过程是一个用户自定义函数,用于处理拦截的消息。钩子过程必须按以下的语法格式设计:LRESULTCALLBACKHookProc(intnCode,WPARAMwParam,LPARAMlParam){//下面处理事件...returnCallN
4、extHookEx(NULL,nCode,wParam,lParam);}HookProc是钩子过程的名称。子过程的参数说明nCode,是钩子过程用于决定采取什么动作的钩子编码,它取决于钩子的类型。不同类型的钩子都有相对应的一组钩子编码。wParam和lParam,通常包含钩子所拦截的消息的信息,具体内容取决于钩子编码。CallNextHookEx()函数CallNextHookEx()函数用于将钩子信息传送给下一个钩子过程,一般在钩子过程里调用CallNextHookEx()函数。CallNex
5、tHookEx()函数的原型如下:LRESULT CallNextHookEx(HHOOK hhk,//当前钩子的句柄int nCode,//钩子编码,下一个钩子过程通过该编码决定如何处理钩子信息WPARAM wParam,//但钱钩子过程接收到的wParam参数值,具体内容取决于钩子编码。LPARAM lParam//但钱钩子过程接收到的wParam参数值,具体内容取决于钩子编码。);全局钩子和特定线程钩子钩子可以分为全局钩子和特定线程钩子两种,全局钩子可以监视与调用线程位于同一桌面的所有线程的
6、消息;而特定线程钩子则只能监视一个单独线程的消息。特定线程钩子的钩子过程可以在应用程序的任何位置,而全局钩子的钩子过程则只能在DLL中定义。因为全局钩子可以拦截其他应用程序的消息,然后调用钩子过程对拦截的消息进行处理。因为每个进程都有自己的私有内存空间,所以一个进程不能调用其他进程的代码,也不能访问其他进程的内存数据。这样如果在安装钩子的进程中定义钩子过程,则其他正在运行的进程被拦截消息后,就不能成功调用钩子过程了。因为DLL中定义的代码可以被不同的进程调用,安装钩子的进程可以将DLL的函数指定为
7、钩子过程,其他进程也可以在其消息被拦截后,调用DLL中定义的钩子过程。钩子的工作原理11.1.2钩子的类型1.WH_CALLWNDPROC和WH_CALLWNDPROCRET2.WH_CBT3.WH_DEBUG4.GWH_FOREGROUNDIDLE5.WH_GETMESSAGE6.WH_JOURNALRECORD7.WH_JOURNALPLAYBACK8.WH_KEYBOARD_LL9.WH_KEYBOARD10.WH_MOUSE_LL和WH_MOUSE11.WH_MSGFILTER和WH_SY
8、SMSGFILTER12.WH_SHELL11.2安装和卸载钩子11.2.1安装钩子11.2.2卸载钩子11.2.1安装钩子调用SetWindowsHookEx()函数可以安装钩子,函数原型如下:HHOOK SetWindowsHookEx(int idHook,//钩子的类型,可以是11.3.2中介绍的确钩子类型之一HOOKPROC lpfn,//指定钩子过程的地址HINSTANCE hMod,//指定包含钩子过程的DLL句柄。DWORD dwThreadId//指定与钩子过程相
此文档下载收益归作者所有