外挂技术(钩子)

合集下载

hook方法的通俗解释

hook方法的通俗解释

hook方法的通俗解释
"hook"方法通常是指在编程中用于改变或扩展现有代码行为的
一种技术。

它通常用于软件开发中的插件或扩展机制中,允许开发
人员在不修改原始代码的情况下,通过在特定的“hook”点插入自
定义代码来改变程序的行为。

具体来说,当一个程序在特定的事件发生时会触发一个“hook”点,开发人员可以注册他们自己的函数或代码到这个“hook”点上。

这样,当该事件发生时,注册的代码就会被执行,从而改变了程序
的行为。

举个例子,假设有一个网页应用程序,当用户点击“提交”按
钮时,程序会触发一个“beforeSubmit”钩子。

开发人员可以注册
他们自己的函数到这个钩子上,用于在表单提交之前执行一些额外
的验证或处理逻辑。

这样,无需修改原始的提交按钮代码,就可以
通过“hook”方法来扩展其行为。

总的来说,"hook"方法是一种非常灵活的技术,可以帮助开发
人员在不破坏现有代码结构的情况下,对程序进行定制和扩展。


在软件开发中被广泛应用,能够提高代码的可维护性和可扩展性。

详解易语言的钩子(钩子HOOK与APIHOOK区别)

详解易语言的钩子(钩子HOOK与APIHOOK区别)

详解易语⾔的钩⼦(钩⼦HOOK与APIHOOK区别)在本篇内容⾥我们给⼤家详细分析了易语⾔中间的钩⼦概念以及HOOK与APIHOOK区别钩⼦原英⽂名称 Hook ,钩⼦的意思是指拦截或截获。

作⽤就是拦截程序中交互的数据,先经过我们预定的钩⼦处理接⼝程序,处理过后,再交还给原处理程序,或者⼲脆阻⽌,吃掉这些数据,让原处理程序什么也得不到。

钩⼦原来是Windows操作系统常⽤来检查系统与程序间通信的⼀些数据是否到达⽬标时⽤的,为不传之密,后来随着⼀些⾼⼿们的研究,逐渐的发现了这些秘密的技术并且公布了出来。

同时还有更多的⼈在掌握了这些技术后,⽤在⾃已的软件开发中,实现出奇招⽽超过其它同类软件的功能⽽赢得市场。

钩⼦技术的种类上很多.HOOK API和HOOK技术完全不同。

尽管它们都是钩⼦。

HOOK钩的是消息,它在系统将消息传递给应⽤程序之前截获它,然后进⾏操作、或修改消息、或停⽌消息的传递;⽽HOOK API截获的是应⽤程序对系统API的调⽤,它在应⽤程序对系统API的调⽤之前截获此调⽤动作,让其转⽽调⽤我们所定义的函数(内容可能是进⾏⼀些操作后再调⽤原系统API)。

关于HOOK技术,微软为我们提供了现成的API,有固定的使⽤步骤。

⽽对于HOOK API技术,微软并没有向我们提供类似的API,没有那么简洁的步骤可供我们参考,也许是因为微软并不希望我们⽤这样的⼿段编程,所以相对要⿇烦⼀些。

WINDOWS的钩⼦函数可以认为是WINDOWS的主要特性之⼀。

利⽤它们,您可以捕捉您⾃⼰进程或其它进程发⽣的事件。

通过“钩挂”,您可以给WINDOWS⼀个处理或过滤事件的回调函数,该函数也叫做“钩⼦函数”,当每次发⽣您感兴趣的事件时,WINDOWS都将调⽤该函数。

⼀共有两种类型的钩⼦:局部的和远程的。

局部钩⼦仅钩挂您⾃⼰进程的事件。

远程的钩⼦还可以将钩挂其它进程发⽣的事件。

远程的钩⼦⼜有两种:基于线程的它将捕获其它进程中某⼀特定线程的事件。

hook9大类

hook9大类

hook9⼤类HOOK技术主要分为两⼤类,⼀是内核层HOOK,⼀是⽤户层HOOK. ⽤户层HOOK也就是在ring3环境下hook kenerl32.dll、User3.dll、Gui32.dll、Advapi.dll等导出的函数。

⽽内核层HOOK就是HOOK只有ring0级别环境下才能操作写⼊改变的内核对象,例如SSDT系统服务描述符表等。

综合⽽⾔,主要有以下9种HOOK技术。

(1)消息钩⼦消息钩⼦是最常见的钩⼦之⼀,例如常见的键盘⿏标钩⼦,很多⽊马就是通过消息钩⼦获取密码的。

消息钩⼦是由Win32⼦系统提供,⽤户通过它注册全局钩⼦。

当系统获取某些事件,⽐如⽤户按键,键盘driver将扫描码等传⼊win32k的KeyEvent处理函数,处理函数判断有⽆相应hook,有则通过回调函数处理。

此时,系统取得Hook对象信息,若⽬标进程没有装载对应的Dll,则装载之。

(2)IAT HOOKIAT HOOK[4]是最常见和普遍的HOOK之⼀。

IAT表⽰导⼊地址表(Import Address Table),导⼊函数就是被程序调⽤但其执⾏代码⼜不在程序中的函数,当PE ⽂件被装⼊内存的时候,Windows 装载器才将DLL 装⼊,并将调⽤导⼊函数的指令和函数实际所处的地址联系起来(动态连接),这种操作就需要导⼊表完成。

其中导⼊地址表就指⽰函数实际地址。

程序每个调⽤的API 函数地址都保存在 IAT 表中,⽽每个调⽤ API 函数的 CALL 指令所使⽤的地址都是相应函数登记在 IAT 表的地址。

IATHOOK原理是在将 IAT 表中的地址换成⽤户⾃⼰的函数地址,这样每个 API 调⽤都是先调⽤⽤户⾃⼰的函数。

在这个函数中我们可以完成函数名称的记录、参数的记录、调⽤原来的过程,并在返回时记录结果。

(3)EAT HOOKEAT HOOK的原理是根据替换 PE 格式导出表中的相应函数来实现的。

EAT表⽰导出地址表(Export Address Table),EAT存在于PE⽂件中的edata节,保存了可执⾏⽂件(如DLL ⽂件)的导出的可供其他模块来调⽤的函数和公共变量,包括函数名称和地址等。

legend hook 原理

legend hook 原理

legend hook 原理"Legend Hook"原理传说中的"Legend Hook"是一种游戏外挂程序,它通过操纵游戏数据,让玩家在游戏中获得不正当的优势。

本文将深入探索"Legend Hook"的原理,解释它是如何运作的。

需要了解的是,"Legend Hook"是一种外挂程序,它需要在游戏的安装目录中注入自己的代码,并与游戏进程进行交互。

一旦注入成功,它就可以访问游戏内存中的数据,如玩家的坐标、血量、攻击力等。

这使得"Legend Hook"能够通过修改这些数据来达到其不正当优势的目的。

为了实现它的功能,"Legend Hook"利用了一些计算机科学的基本原理和技术。

其中最核心的原理之一是内存注入。

通过内存注入,"Legend Hook"能够将自己的代码插入到游戏进程的内存空间中,使其与游戏进程运行在同一个环境中。

"Legend Hook"使用了内存扫描技术。

这种技术允许它在游戏内存中搜索特定的数据结构或变量,并将其值读取到自己的代码中。

通过这种方式,"Legend Hook"可以获取游戏中重要的信息,如玩家的位置、血量等。

这些信息将成为其进行后续操作的基础。

"Legend Hook"还利用了钩子技术。

钩子是一种用于拦截和修改程序执行流程的技术。

"Legend Hook"通过钩子技术,可以在游戏函数调用前或调用后注入自己的代码,从而实现对游戏逻辑的控制和修改。

例如,它可以在游戏中玩家攻击的函数调用前插入代码,将玩家攻击力暂时提升,从而快速击败敌人。

"Legend Hook"还使用了反调试技术。

反调试技术允许它检测是否有人试图对其进行调试或分析。

如果它检测到有人试图调试它的进程,它将会采取一系列措施来阻止调试器的运行。

VB外挂之HOOK技术的最详细教程

VB外挂之HOOK技术的最详细教程

vb外挂之HOOK技术终极详细解说By:史上最大小强很多学习vb的人都想学习外挂及hook,我在网上也找到了一段程序,后台键盘记录外挂,其实网上大多数流传的HOOK代码都跟这段代码几乎一个出处。

网上有关于这些代码的解释,但是关键部分根本就没解释,等于没说。

下面的程序解释得很详细。

有的地方全属个人看法,不过还是值得一看。

不对的地方欢迎大家指出。

当然,高手勿笑。

好吧,正式我们的hook学习。

Hook并不神秘,它说到底就是通过调用API函数在消息队列中安装钩子,实现截获消息,处理消息的功能。

在这里,我浅浅的讲讲windows的消息机制。

比如,我们按键盘的某个键时,系统就会生成一个消息到系统的消息队列,系统再发送到应用程序消息队列中,windows有不同的消息队列。

对于键盘钩子,是安装在系统的消息队列中。

看程序:(以下程序在模块中,呵呵,工程-----添加模块)Option Explicit ‘强制性变量声明,不允许出现未声明的变量。

呵呵,都懂!!Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer‘Getkeystate是api函数,顾名思义,获取某个键的状态,参数nvirtkey就是某个键的虚拟键键码,不同的系统虚拟键码不同。

比如vbkeycontrol或者vbkeyshift就可以作为参数。

返回值是16位的,如开关键打开,则位0设为1(开关键包括CapsLock,NumLock,ScrollLock);如某个键当时正处于按下状态,则位15为1;如已经抬起,则为0。

数据在储存器中,最高位为1时是负数,为0时是正数。

Public 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‘Setwindowshookex,就是建立钩子的函数,最主要的的函数。

外挂使用方法

外挂使用方法

步骤一:
打开秒杀辅助器
然后点击“开启方式”里的“第一次运行要先点我网载”它会提示重新启动秒杀辅助器,然后你手动先关掉秒杀辅助器
步骤二:
打开登录器,进入游戏,{{{刚买挂,不会使用秒杀的会员先进这个私服IP: 121.12.106.95 服务器名:刀魂3区自己打弓箭手或去猪7试验等用出秒杀后再进自己的私服就知道该怎么调了}}}
接着打开及时雨跟幻想(双挂我会发送给你们的记得把双挂里的文件夹里的
改成你自己游戏中的名字)然后按F12一起呼出(记得F12一起呼)
步骤三:
打开秒杀辅助器
点击“开启方式”里的“打开私服进程”
选择”Mir36UC.DA T”也就是传奇私服的进程
然后双击
接着点击“导入私服钩子”
选择“私服钩子”打开它
最后点击“开启方式”下面的“开启辅助”
OK 游戏里面就出现效果了。

注意: 我传给大家的双挂里面调了幻想36倍有的私服调高了会掉线。

掉线的话调低点有的不封速的直接调99倍自己可以琢磨倍数。

最后给大家几个效果比较明显的私服自己上去试验。

最后通用的话一般把幻想调10倍及时雨调2倍因为有些服封速调高会掉线
IP:121.12.106.95 服务器名:随便填可以进这是轻变私服(以前人气非常的旺但是被我们秒杀秒的没人气了呵呵)里面一般的装备可以秒杀终极装备的人
IP:121.14.151.47 中变的私服,自己可以上去试还有好多好多的私服大家可以自己找找,,还有双挂的调法可以自己琢磨,,,本秒杀辅助器还可以配合3T一起使用秒杀效果更佳!!!!!!!!!!!!!!!!!!最后祝大家游戏愉快!!!!!。

网络游戏外挂技术

网络游戏外挂技术

网络游戏外挂技术网络游戏外挂技术想必很多人都是听过或者使用过,但是真正怎么取制作想必很多人都是不清楚的。

所以店铺今天就在这里给大家分享下网络游戏外挂技术的知识。

下面是具体内容:网络游戏外挂技术引言所谓游戏外挂,是一种游戏外部的辅助程序,它可以帮助玩家自动生成游戏动作、修改游戏的网络数据封包等,使玩家以最少的时间和精力完成游戏中的各种任务。

随着网络游戏的不断升温,游戏外挂作为其附属品也得到了迅猛的发展。

从最初的鼠标键盘模拟和变速齿轮技术发展到挡截Sock、挡截API等高端技术的应用。

事物都有两面性,游戏外挂也不例外。

一方面,它可以使玩家从机械的、重复的操作中解放出来,使游戏更加人性化,娱乐化。

另一方面,一些恶意外挂篡改游戏数据,欺骗服务器,严重破坏了游戏的公平性,使玩家大量流失。

因此,外挂的开发应仅限于研究和学习编程技术之用。

1 外挂技术综述外挂的种类纷繁复杂,功能也多种多样。

针对同一款网络游戏的外挂甚至多达几十种,功能相同的外挂实现起来也有若干种不同的技术,例如本文下面要谈到的某网络斗地主游戏记牌器外挂的实现方式至少有三种,通过分析屏幕扑克牌的图片、通过读取游戏在本地机所使用的内存空间、截获并分析数据封包。

因此对网游外挂做一个科学的分类显得十分必要。

按照外挂所针对的游戏类型,可以把其分为两大类即,模拟玩家鼠标、键盘操作的动作模拟类外挂和截获数据封包,提取或修改其中数据的封包类外挂。

下面对两类外挂所采用的技术进行详细说明。

1.1 动作模拟类外挂动作模拟类外挂可以在没有人为干预的情况下,自动控制游戏中的角色,使其四处行走或者发动攻击。

此类外挂看似复杂,其实原理非常简单。

游戏中角色的行动是靠鼠标与键盘控制,此类外挂就是调用相关的API函数,来模拟玩家对鼠标和键盘的操作,从而控制游戏中的角色。

1.1.1 鼠标模拟技术鼠标的操作包含以下几种,点击左键、点击右键、点击中键、移动鼠标改变相应窗体中指针的位置。

C#Hook

C#Hook

C#Hook前⾔ 在说C# Hook之前,我们先来说说什么是Hook技术。

相信⼤家都接触过外挂,不管是修改游戏客户端的也好,盗取密码的也罢,它们都是如何实现的呢? 实际上,Windows平台是基于事件驱动机制的,整个系统都是通过消息的传递来实现的。

当进程有响应时(包括响应⿏标和键盘事件),则Windows会向应⽤程序发送⼀个消息给应⽤程序的消息队列,应⽤程序进⽽从消息队列中取出消息并发送给相应窗⼝进⾏处理。

⽽Hook则是Windows消息处理机制的⼀个平台,应⽤程序可以在上⾯设置⼦程以监视指定窗⼝的某种消息,⽽且所监视的窗⼝可以是其他进程所创建的。

当消息到达后,在⽬标窗⼝处理函数之前处理它。

钩⼦机制允许应⽤程序截获处理window消息或特定事件。

所以Hook就可以实现在键盘/⿏标响应后,窗⼝处理消息之前,就对此消息进⾏处理,⽐如监听键盘输⼊,⿏标点击坐标等等。

某些盗号⽊马就是Hook了指定的进程,从⽽监听键盘输⼊了什么内容,进⽽盗取账户密码。

C# Hook 我们知道C#是运⾏在.NET平台之上,⽽且是基于CLR动态运⾏的,所以只能操作封装好的函数,且⽆法直接操作内存数据。

⽽且在C#常⽤的功能中,并未封装Hook相关的类与⽅法,所以如果⽤C#实现Hook,必须采⽤调⽤WindowsAPI的⽅式进⾏实现。

WindowsAPI函数属于⾮托管类型的函数,我们在调⽤时必须遵循以下⼏步: 1、查找包含调⽤函数的DLL,如User32.dll,Kernel32.dll等。

2、将该DLL加载到内存中,并注明⼊⼝ 3、将所需参数转化为C#存在的类型,如指针对应Intptr,句柄对应int类型等等 4、调⽤函数 我们本篇需要使⽤的函数有以下⼏个: SetWindowsHookEx ⽤于安装钩⼦ UnhookWindowsHookEx ⽤于卸载钩⼦ CallNextHookEx 执⾏下⼀个钩⼦ 详细API介绍请参考MSDN官⽅声明 接下来在C#中需要⾸先声明此API函数:[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,IntPtr hInstance, int threadId);[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]public static extern bool UnhookWindowsHookEx(int idHook);[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]public static extern int CallNextHookEx(int idHook, int nCode,IntPtr wParam, IntPtr lParam); 声明后即可实现调⽤,SetWindowsHookEx()把⼀个应⽤程序定义的钩⼦⼦程安装到钩⼦链表中,SetWindowsHookEx函数总是在Hook链的开头安装Hook⼦程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

外挂技术(钩子)WIndows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。

而钩子是WIndows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。

钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。

这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。

可见,利用钩子可以实现许多特殊而有用的功能。

因此,对于高级编程人员来说,掌握钩子的编程方法是很有必要的。

钩子的类型一.按事件分类,有如下的几种常用类型(1)键盘钩子和低级键盘钩子可以监视各种键盘消息。

(2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。

(3)外壳钩子可以监视各种Shell事件消息。

比如启动和关闭应用程序。

(4)日志钩子可以记录从系统消息队列中取出的各种事件消息。

(5)窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。

此外,还有一些特定事件的钩子提供给我们使用,不一一列举。

下面描述常用的Hook类型:1、WH_CALLWNDPROC和WH_CALLWNDPROCRET HooksWH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。

系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook 子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。

WH_CalLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。

CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。

2、WH_CBT Hook在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;2. 完成系统指令;3. 来自系统消息队列中的移动鼠标,键盘事件;4. 设置输入焦点事件;5. 同步系统消息队列事件。

Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。

3、WH_DEBUG Hook在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUG Hook 子程。

你可以使用这个Hook来决定是否允许系统调用与其他HooK关联的Hook子程。

4、WH_FOREGROUNDIDLE Hook当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook 执行低优先级的任务。

当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子程。

5、WH_GETMESSAGE Hook应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。

你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及其他发送到消息队列中的消息。

6、WH_JOURNALPLAYBACK HookWH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。

可以使用这个Hook回放通过使用Wh_jOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。

只要WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的。

WH_JOURNALPLAYBACK Hook是全局Hook,它不能象线程特定Hook 一样使用。

WH_joURNALPLAYBACK Hook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)。

这就使Hook可以控制实时事件的回放。

WH_JOURNALPLAYBACK是system-wide local hooks,它們不會被注射到任何行程位址空間。

(估计按键精灵是用这个hook做的)7、WH_JOURNALRECORD HookWH_JOURNALRECORD Hook用来监视和记录输入事件。

典型的,可以使用这个Hook 记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACK Hook来回放。

WH_jOURNALRECORD Hook是全局Hook,它不能象线程特定Hook一样使用。

WH_jOURNALRECORD是system-wide local hooks,它們不會被注射到任何行程位址空間。

8、WH_KEYBOARD Hook在应用程序中,WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP 消息,这些消息通过GetMessage or PeekMessage Function返回。

可以使用这个Hook 来监视输入到消息队列中的键盘消息。

9、WH_KEYBOARD_LL HookWH_KEYBOARD_LL Hook监视输入到线程消息队列中的键盘消息。

10、WH_MOUSE HookWH_MOUSE Hook监视从GetMessage 或者PeekMessage 函数返回的鼠标消息。

使用这个Hook监视输入到消息队列中的鼠标消息。

11、WH_MOUSE_LL HookWH_MOUSE_LL Hook监视输入到线程消息队列中的鼠标消息。

12、WH_MSGFILTER 和WH_SYSMSGFILTER HooksWH_MSGFILTER 和WH_SYSMSGFILTER Hooks使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。

WH_MSGFILTER Hook只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了Hook子程的应用程序建立的对话框的消息。

WH_SYSMSGFILTER Hook监视所有应用程序消息。

WH_MSGFILTER 和WH_SYSMSGFILTER Hooks使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过滤消息。

通过调用CallMsgFIlter function可以直接的调用wh_MSGFILTER Hook。

通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样。

13、WH_SHELL Hook外壳应用程序可以使用WH_SHELL Hook去接收重要的通知。

当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELL Hook子程。

WH_SHELL 共有5钟情況:1. 只要有个top-level、unowned 窗口被产生、起作用、或是被摧毁;2. 当Taskbar需要重画某个按钮;3. 当系统需要显示关于Taskbar的一个程序的最小化形式;4. 当目前的键盘布局状态改变;5. 当使用者按Ctrl+Esc去执行Task Manager(或相同级别的程序)。

按照惯例,外壳应用程序都不接收WH_SHELL消息。

所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfo funCtIon注册它自己。

以上是13种常用的hook类型!二.按使用范围分类,主要有线程钩子和系统钩子(1)线程钩子监视指定线程的事件消息。

(2)系统钩子监视系统中的所有线程的事件消息。

因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。

这是系统钩子和线程钩子很大的不同之处。

几点需要说明的地方:(1)如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。

(2)对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。

当前钩子处理结束后应把钩子信息传递给下一个钩子函数。

而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

(3)钩子特别是系统钩子会消耗消息处理时间,降低系统性能。

只有在必要的时候才安装钩子,在使用完毕后要及时卸载。

编写钩子程序编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子。

1.定义钩子函数钩子函数是一种特殊的回调函数。

钩子监视的特定事件发生后,系统会调用钩子函数进行处理。

不同事件的钩子函数的形式是各不相同的。

下面以鼠标钩子函数举例说明钩子函数的原型:LRESULT CALLBACK HookProc(Int nCode ,WPARAM wParam,LPARAM lParam)参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。

nCode包含有关消息本身的信息,比如是否从消息队列中移出。

我们先在钩子函数中实现自定义的功能,然后调用函数CallNextHookEx.把钩子信息传递给钩子链的下一个钩子函数。

CallNextHookEx.的原型如下:LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam )参数hhk是钩子句柄。

nCode、wParam和lPAram 是钩子函数。

当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递。

2.安装钩子在程序初始化的时候,调用函数SetWindowsHookEx安装钩子。

其函数原型为:HHOOK SetWindowsHookEx( int idHook,HOOKPROc lpfn, INSTANCE hMod,DWORD dwThreadId )参数IdHook表示钩子类型,它是和钩子函数类型一一对应的。

比如,WH_KEYBOARD 表示安装的是键盘钩子,WH_MOUSE表示是鼠标钩子等等。

LpFn是钩子函数的地址。

HMod是钩子函数所在的实例的句柄。

对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。

dwThreadId 指定钩子所监视的线程的线程号。

对于全局钩子,该参数为NULL。

SetWindowsHookEx返回所安装的钩子句柄。

3.卸载钩子当不再使用钩子时,必须及时卸载。

简单地调用函数BOOL UnhookWindowshookEx( HHOOK hhk)即可。

值得注意的是线程钩子和系统钩子的钩子函数的位置有很大的差别。

线程钩子一般在当前线程或者当前线程派生的线程内,而系统钩子必须放在独立的动态链接库中,实现起来要麻烦一些。

线程钩子的编程实例:按照上面介绍的方法实现一个线程级的鼠标钩子。

钩子跟踪当前窗口鼠标移动的位置变化信息。

相关文档
最新文档