外挂技术(钩子)

合集下载

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⼦程。

hook原理

hook原理

hook原理
Hook原理是一种编程手段,它可以在不修改源代码的情况下,通过在应用程序的关键步骤之前或之后插入特定的代码,来实现对应用程序的功能增强、维护或检测。

Hook原理是一种“挂钩”机制,即在应用程序运行时,通过挂钩机制,将第三方软件插入原来的程序中,从而实现功能拓展,是一种常用的API和操作系统级别的编程技术。

Hook原理可以用来实现各种功能,如增强处理器性能、实现数据存储、实现调试技术、运行安全性检查、更新应用程序、保护数据和确保安全等等。

Hook原理的实现可以通过几种方法,包括直接在应用程序的关键函数上添加hook代码,将hook代码作为程序的一部分添加,或使用已有的应用程序接口(API)来实现hook原理。

首先,要实现hook原理,就必须在应用程序的关键函数上添加hook代码,即在函数的入口处和出口处添加hook 代码,以便在函数的入口处检查函数的参数,在函数的出口处检查函数的返回值,并在此基础上实现相应的功能增强。

其次,可以将hook代码作为应用程序的一部分添
加,即在调用函数的入口处添加hook代码,以便在调用函数之前和之后进行检查,实现相应的功能增强。

另外,也可以利用已有的应用程序接口(API)来实现hook原理。

API中有一组特殊的函数,可以在应用程序的关键步骤之前或之后插入特定的代码,以便实现功能增强、维护或检测。

比如,Windows系统中的SetWindowHookEx函数,可以让用户在应用程序的特定消息发生时,即时地收到消息,从而实现功能增强或检测。

以上就是hook原理的实现方式。

hook原理广泛应用于编程中,可以实现各种功能,有助于提高应用程序的性能和安全性。

(完整word版)常用的十三种hook类型

(完整word版)常用的十三种hook类型

本文将试图以下面的顺序讲解HOOK的大部分内容:1、 WINDOWS的消息机制2、 HOOK介绍3、 HOOK链4、 HOOK钩子的作用范围5、 HOOK类型6、回调函数7、 HOOK钩子的安装与卸载8、 HOOK实例演示+++++++++++++++++++WINDOWS的消息机制+++++++++++++++++++Windows系统是以消息处理为其控制机制,系统通过消息为窗口过程(windowsprocedure)传递输入。

系统和应用两者都可以产生消息。

对于每个输入事件,例如用户按下了键盘上的某个键、移动了鼠标、单击了一个控件上的滚动条,等等,系统都将产生一系列消息。

此外,对于应用带给系统的变化,如字体资源的改变、应用本身窗口的改变,系统都将通过消息以响应这种变化。

应用通过产生消息指示应用的窗口完成特定的任务,或与其他应用的窗口进行通信。

每个窗口都有一个处理Windows系统发送消息的处理程序,称为窗口程序。

它是隐含在窗口背后的一段程序脚本,其中包含对事件进行处理的代码。

Windows系统为每条消息指定了一个消息编号,例如当一个窗口变为活动窗口时,它事实上是收到一条来自Windows系统的WM_ACTIVATE消息,该消息的编号为6,它对应于VB窗口的Activate事件。

对于窗口来说,诸如Open、Activate、MouseDown、Resize等事件,实际上对应的是窗口内部的消息处理程序,这些程序对于用户来讲是不可见的。

类似地,命令按钮也有消息处理程序,它的处理程序响应诸如WM_LBUTTONDOWN和WM_RBUTTONDOWN之类的消息,即激活命令按钮的MouseDown事件.WINDOWS的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接各种回调函数(HOOK)的功能.这种挂钩函数(HOOK)类似扩充中断驱动程序,挂钩上可以挂接多个反调函数构成一个挂接函数链.系统产生的各种消息首先被送到各种挂接函数,挂接函数根据各自的功能对消息进行监视、修改和控制等,然后交还控制权或将消息传递给下一个挂接函数以致最终达到窗口函数。

外挂原理(珍藏版)

外挂原理(珍藏版)
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//模拟按下鼠标右键。
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//模拟放开鼠标右键。
2. 键盘模拟技术
在很多游戏中,不仅提供了鼠标的操作,而且还提供了键盘的操作,在对攻击对象
懂的名字??游戏修改器。它可
以在游戏中追踪锁定游戏主人公的各项能力数值。这样玩家在游戏中可以达到主角不掉
血、不耗费魔法、不消耗金钱
等目的。这样降低了游戏的难度,使得玩家更容易通关。
随着网络游戏的时代的来临,游戏外挂在原有的功能之上进行了新的发展,它变得
更加多种多样,功能更加强大
关虚拟键值表请在MSDN上使用
关键字“Virtual-Key Codes”查找相关资料。bScan表示当键盘上某键被按下和放开
时,键盘系统硬件产生的扫描码
,我们可以MapVirtualKey()函数在虚拟键值与扫描码之间进行转换。dwFlags表示各种
各样的键盘动作,它有两种取
值:KEYEVENTF_EXTENDEDKEY和KEYEVENTF_KEYUP。
,这些好像已经成为了角色游戏的代名词。现在,外挂可以帮助玩家从这些繁琐而无聊
的工作中摆脱出来,专注于游
戏情节的进展。外挂程序为了实现自动角色位置移动和自动攻击等功能,需要使用到键
盘模拟技术和鼠标模拟技术。
下面我们将重点介绍这些技术并编写一个简单的实例帮助读者理解动作模拟技术的实现
过程。
首先需要做基本工作--?砍树。
砍树的方法很简单,在一棵大树前不停的点鼠标就可以了,每10000的经验升一级。这

拼图游戏简易外挂的实现

拼图游戏简易外挂的实现

维普资讯
以联众拼图游 戏为侧 。说明其用法如下:
第一步进入联众拼 图游戏 .点击 ” 开始”前,设置参加 人 数 ( 、4 ).分割数 ( 、1 )和建度 ( 3 2 、6 5 0 >)
第二步在拼图中,出现拼图图形后 ,点击 “ 开始”即可
第三步停止 自动拼图.请按右 Cr t。 l
鼠标、键 盘等.使游戏照的角色进行运动 .是一种容易实现的 人门级的外 挂 而采用封包技术或修改内存技术来实现外 挂. 需要跟踪游戏的运行并 l细分析其数据结构 ,所以实现起 来有 苹
“ 拼图工作 区”用米供游戏街不断通过对谰分成的多个小图案 块 .来拼成正确 的图案 ; 进度指示 区”用来指示 当前拼图的
维普资讯
耍 用 鬈一 窖 m田●
G’ AlI I : & GAM PROG RA M R , I (S
图形图像处理与游戏编程
拼 图 游 戏 简 易 外 挂 的 实 现
齐玉东


本 文通过介绍针 对拼图游戏的动作式 外挂及特点 .模拟 鼠标动作并 结合 钩子 函 数 ,实现 了对拼 图游戏的控制
色表示 ( 圈中为 白色 )。
些难度。本文 所介绍的拼 图游戏简易 外挂就是一种动 作式外
挂,它利用 丁拼 图游戏的特点 ,通过模拟鼠标动作并结 合钩子 函数,实现 _对游戏的控制 这 里把作 者的实现方 法作 介 r 绍,谨作抛砖引玉之用 ,希望 大家能做出更 好的外桂来 使游戏 厂商更好地完替 自己的技术。
拼 图,外挂 ,钩子 函数
关键调


引 言
针对水同类 型的游戏 .可以通过多种手段实现游戏外挂.
其中, “ 完整图案l 爱”,用来 鼎示最终的正确拼图图案 ;

浅谈c++hook钩子的使用介绍

浅谈c++hook钩子的使用介绍

浅谈c++hook钩⼦的使⽤介绍⼀、基本概念:钩⼦(Hook),是Windows消息处理机制的⼀个平台,应⽤程序可以在上⾯设置⼦程以监视指定窗⼝的某种消息,⽽且所监视的窗⼝可以是其他进程所创建的。

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

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

钩⼦实际上是⼀个处理消息的程序段,通过系统调⽤,把它挂⼊系统。

每当特定的消息发出,在没有到达⽬的窗⼝前,钩⼦程序就先捕获该消息,亦即钩⼦函数先得到控制权。

这时钩⼦函数即可以加⼯处理(改变)该消息,也可以不作处理⽽继续传递该消息,还可以强制结束消息的传递。

⼆、运⾏机制:1、钩⼦链表和钩⼦⼦程:每⼀个Hook都有⼀个与之相关联的指针列表,称之为钩⼦链表,由系统来维护。

这个列表的指针指向指定的,应⽤程序定义的,被Hook⼦程调⽤的回调函数,也就是该钩⼦的各个处理⼦程。

当与指定的Hook类型关联的消息发⽣时,系统就把这个消息传递到Hook⼦程。

⼀些Hook⼦程可以只监视消息,或者修改消息,或者停⽌消息的前进,避免这些消息传递到下⼀个Hook⼦程或者⽬的窗⼝。

最近安装的钩⼦放在链的开始,⽽最早安装的钩⼦放在最后,也就是后加⼊的先获得控制权。

Windows 并不要求钩⼦⼦程的卸载顺序⼀定得和安装顺序相反。

每当有⼀个钩⼦被卸载,Windows 便释放其占⽤的内存,并更新整个Hook链表。

如果程序安装了钩⼦,但是在尚未卸载钩⼦之前就结束了,那么系统会⾃动为它做卸载钩⼦的操作。

钩⼦⼦程是⼀个应⽤程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。

⽤以监视系统或某⼀特定类型的事件,这些事件可以是与某⼀特定线程关联的,也可以是系统中所有线程的事件。

钩⼦⼦程必须按照以下的语法:LRESULT CALLBACK HookProcint nCode,WPARAM wParam,LPARAM lParam);HookProc是应⽤程序定义的名字。

挂勾梯训练方法

挂勾梯训练方法

挂勾梯训练方法挂勾梯训练是一种互联网技术领域中常用的训练方法,用于提高技术人员在互联网项目中的能力和效率。

本文将介绍挂勾梯训练的定义、训练步骤和训练技巧,帮助读者快速了解并掌握这一方法。

一、挂勾梯训练的定义挂勾梯训练,又称Hook ladder training,是一种通过实践和反思的训练方法,旨在帮助互联网技术人员提高他们的技术能力和解决问题的效率。

这种训练方法通过模拟各种实际的互联网应用场景,使学员在实践中掌握相关技术,提高工作流程和项目执行能力。

二、挂勾梯训练的步骤挂勾梯训练通常分为以下几个步骤:1. 定义学习目标:在开始训练之前,明确学员的学习目标是非常重要的。

学员应该清楚地知道他们希望通过这种训练方法获得什么技能或经验。

2. 模拟实际场景:挂勾梯训练的核心部分是模拟实际的互联网应用场景。

通过构建各种实际情境,学员可以在实践中学习和应用知识,并磨练解决问题的能力。

3. 反思和总结:每次完成一次模拟训练后,学员应该进行反思和总结。

他们可以回顾整个过程,分析自己的行动和决策是否合理,以及如何改进和优化。

4. 持续学习和提升:挂勾梯训练不应该是一次性的活动,而是一个持续的过程。

学员应该不断学习新知识、积累实践经验,并通过实践不断提升自己。

三、挂勾梯训练的技巧为了让挂勾梯训练更加有效,以下是几个技巧值得注意:1. 制定合理的训练计划:在进行挂勾梯训练之前,学员应该制定一个合理的训练计划。

计划中应包括学习目标、时间安排、实践场景等,以帮助学员有条不紊地进行训练。

2. 寻找适合的实践场景:实践场景的选择至关重要,应尽量贴近实际工作中的情景。

学员可以通过参与真实项目、解决实际问题等方式,找到适合的实践场景。

3. 注重反思和总结:反思和总结是挂勾梯训练中的关键环节。

学员应该始终保持反思的习惯,从每次训练中吸取经验教训,并及时总结,不断提高自己的技术能力。

4. 主动参与交流和分享:挂勾梯训练不仅可以独立进行,也可以通过与他人的交流和分享来提升效果。

监视器控制-监视、控制计算机的使用概要

监视器控制-监视、控制计算机的使用概要

监视器控制-监视、控制计算机的使用基于Windows NT/2000 的应用系统中,毕业论文格式一些关键的人机交互工作站,常需要了解并记录所有操作人员操作计算机的情况职称论文发表如: 在工业控制领域,一些使用计算机对设备进行监视和控制的工作站,需要非常高的可靠性和安全性。

在这些工作站上通常要求只能运行系统所要求的应用程序,不能运行与系统无关的程序,同时要求对计算机操作人员的所有原始输入进行记录,以便出现事故(如操作故障、程序异常退出)的时候,用来分析是人为原因,还是系统原因造成的。

基于以上需求,我们必须解决两个问题,一个是如何记录操作人员的输入,另一个是如何控制操作人员的输入。

在DOS、Windows 3.1、Windows 95/98中都可以编写响应键盘和鼠标输入的中断处理程序,截取来自键盘和鼠标的输入,记录、分析后依情况分别处理。

但是在Windows NT和 Windows 2000中,这样的解决方法将不再行得通,这是因为Windows NT/2000操作系统为了提高系统的可靠性,不再允许应用程序直接对系统设备的底层进行操作。

这样,用户的应用程序将不能够对计算机的端口地址进行读写操作,所以在WindowsNT/2000操作系统中对计算机端口的读写是无效的。

另外一种方法能够非常完美地解决这个问题,就是可以编写操作系统的设备驱动程序来解决,但是要编写系统的设备驱动程序,必须对Windows NT/2000的系统底层以及整个系统架构有比较深入的了解。

而且设备驱动程序的编写、调试都比较困难,同时这方面的资料也比较少。

所以本文没有采取这种方法,而是采用微软公布的标准Win32 函数和钩子技术来解决这个问题,比较方便而且快捷。

在Windows NT/2000 操作系统中,称各种输入为事件(Event),所有的键盘、鼠标输入事件以及其他事件都是通过消息传递处理机制来得到响应的。

控制、监视计算机实际上是控制、监视事件消息流。

西夏文四角号码输入法研究

西夏文四角号码输入法研究

西夏文四角号码输入法研究柳长青;史伟;杜建录【摘要】对基于Hook,和输入法生成器技术的西夏文四角号码输入法进行了深入研究,实现了在Windows系统下西夏文的录入,为西夏古籍文献的数字化、文本化提供了专用在线输入平台.并利用在线模糊输入方法修复了西夏古籍文献中的部分残缺西夏字.西夏文四角号码输入法对于如契丹文、女真文等少数民族语言文字的计算机输入法研究具有一定的借鉴价值.【期刊名称】《宁夏大学学报(自然科学版)》【年(卷),期】2010(031)004【总页数】5页(P324-328)【关键词】西夏文;西夏文献;四角号码;输入法;互联网【作者】柳长青;史伟;杜建录【作者单位】宁夏大学,西夏学研究院,宁夏,银川,750021;宁夏大学,数学计算机学院,宁夏,银川,750021;宁夏大学,西夏学研究院,宁夏,银川,750021;宁夏大学,数学计算机学院,宁夏,银川,750021;宁夏大学,西夏学研究院,宁夏,银川,750021【正文语种】中文【中图分类】TP391西夏文是党项族创立的一种少数民族语言文字[1].西夏字近似于汉字,但其结构与汉字有很大差异,笔画繁琐且无一字与汉字相同.当前在西夏文数字化的研究方面,日本国立亚非语言文化研究所1996年制作了西夏文字库和排版系统;台湾中央研究院语言学研究所的龚煌城和林英津于2000年合作开发了西夏文字形属性资料库及计算机输入法;柳长青于1999年开发了“夏汉字处理及电子字典”软件,该软件是按照四角号码和顺序号检字法对西夏字进行排列、注音和释义的Windows单机版应用软件,提供了外挂式的西夏文四角号码输入法;2005年景永时和贾常业开发了基于方正典码系统之上的西夏文录入系统,该系统主要解决了在方正飞腾、蒙泰等排版软件中的西夏文输入问题.由于目前已无人能读出西夏字的准确读音,故在计算机中对西夏字进行快速、准确的输入是困扰西夏学学者的难题.如何建立一种通用的适用于西夏文、汉文计算机混合编辑与排版的西夏文计算机输入法则是西夏文信息处理亟待解决的问题.1 西夏文检字编码西夏文检字编码可以借鉴汉字方法[2].西夏文字是通过仿照汉字而创制的,即以偏旁部首组成方块字,因此可利用此特点建立西夏文四角号码检字法.汉字四角号码检字法是根据汉字的构成特点而编制的,这种方法同样适用于西夏文.目前,西夏文检字编码普遍采用李范文先生的四角号码检字法[3].该方法将西夏字的笔形归纳为9种,9种笔形用9个阿拉伯数字表示,另加无笔形或笔形已取号后的代码0,共10个代码.其笔形、代码及说明如表1所示.表1 西夏字笔形代码表单横 1横或横起、横结束竖或撇笔点、捺 3垂2点或捺叉4一横与三竖交叉或一竖与两、三横交叉复多串 6两笔交叉或一横与两竖交叉串5一横与四竖或一竖与四横交叉笔角 7一笔成角或两笔构成角八8类似汉字八或八的变形小9类似汉字小或小的变形0单笔或复笔已取码且又不能另角成其它形西夏字笔画繁多,如果仅采用四角取号,重码颇多,不利于计算机快速录入的要求,因此采用基本号加附加码的方法减少重码.这样,每一个西夏字的检字码实际上就由6位十进制数构成,即4位基本号加2位附号.其具体取码方法为[3-4]:1)基本号的取码顺序为:左上角、右上角、左下角、右下角.例如:2)附号的取码顺序为:靠近左下角、靠近右下角.例如:2 外挂式西夏文输入法Windows操作系统内部及系统与应用程序之间都是通过消息传递信息的,而钩子(hook)技术是监视系统中消息来往的程序,能够在消息到达目的地之前截获消息并根据用户要求进行动态拦截、跟踪、修改和恢复等相应处理.利用钩子技术的这种特性,可动态地监视鼠标键盘的工作状态,并获取键盘焦点所在对象的属性等信息[5].利用这些信息对键盘进行控制并向文本编辑对象发送特定的文字符,就可以实现外挂式输入法.2.1 钩子技术的基本原理西夏文外挂式输入法可以借鉴汉字外挂输入法的基本原理.采用钩子技术在Windows消息队列上安装一个应用程序过滤器,当每次发生一个键盘消息时,此消息先由定制的过滤器捕获并对它进行相应的处理后再发给应用程序.根据所监视消息的不同,Windows提供了10种钩子[6].每种钩子类型标识符如表2所示.表2 钩子类型一览表钩子类型标识符用途WH_CallWndProc 监视发给窗口的消息WH_CBT 监视窗口变化焦点设置等消息WH_Debug 确定是否执行其他钩子WH_GetMessage 监视投递到消息队列中的消息WH_JournalRecord 监视和记录输入事件WH_JournalPlayBack 回放记录的输入事件WH_KeyBoard 监视键盘消息WH_Mouse 监视鼠标消息WH_MsgFilter 监视菜单滚动条消息框对话框消息WH_Shell 监视有关外壳程序消息钩子函数主要是利用与键盘相关的钩子类型.通过钩子的安装将钩子挂到系统进程中,从而起到监视系统的作用.Windows对钩子过程采用指针列表法进行管理,同类型钩子的地址存在于同一个数组中,每个数组元素是一个钩子的起地址.不同类型钩子对应不同的数组.Windows通过维护10个这样的数组来完成对钩子的管理,这些数组被称为钩子链.每一个安装的钩子,都被排在相应钩子链的链头上.2.2 钩子函数的构造方法钩子过程实际上是一个函数,它的格式应符合下列语法规则:keyhook(Code:Integer;wParam:WPARAM;lParam:LPARAM): LRESULT;stdcall. 其中,参数Code称为钩子代码,钩子函数根据它确定所要完成的动作,不同类型钩子的Code取值范围不同;参数wParam和lParam包含消息信息.钩子函数有2种存放位置:一是与应用程序放在一起;二是单独放在动态链接库DLL 中.由于西夏文输入法需要动态实时地监控系统中所有的线程消息,因此应将钩子放在DLL中;如果应用程序要为其自身的某个线程安装钩子,则钩子可以在应用程序代码的同一个模块中,也可以在DLL中.钩子的安装与拆除用到2个API函数:1)SetWindowsHookEx(WH_KEYBOARD, keyHook,HInstance,0)用于安装钩子,其参数定义如下:参数1 钩子类型标识符,表明安装的是什么钩子;参数2 钩子过程地址,该地址由 GetProcAddress函数获得;参数3 含钩子过程的模块句柄,即应用程序或DLL句柄;参数4 被监视线程的标识符,若为0则监视所有线程.函数返回值为0表示安装失败,否则返回钩子句柄.2)UnHookWindowsHookEx(HookH)用于拆除钩子,HookH参数为待拆除钩子句柄.函数返回值为True表示成功,False表示失败.2.3 码表及键盘响应算法建立键盘钩子函数后,需要制定西夏文输入法码表文件.这里采用自定义数据文件存放四角号码输入法码表.具体数据结构如下:键盘响应算法如下:通过窗口绘制函数将检索到的西夏文依次显示在选字窗口中,并通过调用处理事件来完成西夏文的输入.采用字体链接技术可以把西夏文字库与宋体、楷体、黑体及幼圆等系统 TrueType字库挂接,输入的西夏文可在汉字与西夏文之间切换、编辑和排版.图1为基于上述方法实现的外挂式西夏文输入法,该输入法已经成功运用在“夏汉字处理”和“夏汉电子字典”等软件中[7].图1 外挂式西夏文输入法示例3 西夏文网络输入法网络下的西夏文输入法是为西夏古籍文献文本化软件设计的专用输入法,采用微软Silverlight 1.0和技术实现.该输入法不输出西夏文内码,仅输出西夏文顺序号和四角号码.录入过程在IE浏览器中完成,客户端不需要安装输入法软件,只需安装西夏文网络链接字库用于显示西夏文[8].西夏文数据通过客户端浏览器发送给SQL Server数据库服务器,数据库接收到数据后将数据存储于文本化表中,此表中存放的是西夏文古籍文献图像中的西夏字块与西夏字顺序号及四角号码的关系型元组. 图2 西夏文网络输入法示例西夏文网络输入法利用了四角号码的重码特性实现了四角号码模糊输入功能,利用四角号码重码特性只需输入部分四角号码即可列出符合条件的西夏字[9].由于西夏古籍文献距今已有几百年的历史,文献中有些西夏字4个角上的笔画有不同程度的损毁,这些字的文本化输入就需要借助模糊输入功能.模糊输入功能首先记录清晰可辨的角码;然后将不能辨识的角用“_”字符匹配单个号码或用“%”匹配多个号码;最后用户可以通过通配符输入的方式输入残缺西夏字.采用通配符输入技术为修复古籍文献中的残缺西夏字提供了帮助.图3是西夏古籍文献中的一个残缺西夏字例,该字的右上角残缺,其它3角清晰可辨,由于右上角残缺,故使用“_”单字匹配符匹配,通过四角号码检字法可得到该字的四角号码为“8_4140”.录入后得到表3中与该字最为接近的西夏字.图3 部分残缺的西夏字表3 西夏字形对照表西夏字顺序号四角号码4902 804140 5598 874140 5601 874140 5448 844140通过比对字形可以发现,图3所示的西夏残缺字是表中的 4902号西夏字,其四角号码为“804140”.采用上述网络四角号码输入法可以较好地完成西夏古籍文献的文本化录入工作.该方法不适用于如图4所示的严重残缺的西夏字.对于其他残缺的西夏字的录入方法可以参照此法,但录入后仍需查码及人工认定.图4 严重残缺的西夏字4 IME码表生成器西夏文输入法微软公司为方便用户使用Windows建立个性化输入法,专门提供了一个通用输入法生成器(IME Generator)软件.利用该软件可快速生成Windows系统托盘IME 输入法程序.采用这种方法生成的输入法具有兼容性好,制作简单方便等特点.输入法生成器在 Windows系统目录下,可执行文件名为Imegen.exe,其运行界面如图5所示.下面列出了西夏文码表原文件的编写格式:采用输入法生成器生成西夏四角号码输入法时需将“0123456789”分别用其拼音声母首字母“oyesxwlqbj”代替.其中“0”用字母“O”代表,“3”和“4”的声母首字母都是“s”,故特别规定“4”用“x”代表.上述码表原文件先保存为XXZIME.TXT文件,再用输入法生成器的“创建输入法”功能载入码表原文件.西夏文码表原文件需要先转换为XXZIME.MB文件,再从XXZIME.MB文件创建编译的XXZIME.IME输入法文件并自动安装到Windows目录的system32的文件夹下.编写自定义输入法安装程序需调用下列函数[10]:图6为使用输入法生成器制作的“夏汉通2008”西夏文四角号码输入法在Word 2003下的使用情况.在使用IME输入法输入西夏文时,还需配套使用西夏文宋体链接字库.基于输入法生成器的西夏文输入法的实现,对于其他少数民族语言文字的输入法设计有一定借鉴作用,通过该方法可以快速开发出输入法程序,从而使研究者有更多的精力投入到少数民族语言文字处理的研究之中.图5 输入法生成器图6 “夏汉通2008”IME四角号码输入法示例5 结语本文通过对西夏文四角号码检字法的分析和研究,实现了基于hook、网络和码表生成器3种不同形式的西夏文四角号码输入法.利用本文实现的四角号码输入法并结合马希荣、柳长青等人建立的西夏字字库可实现西夏文的计算机录入.采用四角号码输入西夏字是西夏文及西夏文献数字化处理研究的重要基础性工作[11].通过对西夏文输入法的研究,可提供一种少数民族语言文字计算机输入法设计的基本思路和方法,对于如契丹文、女真文等少数民族语言文字的计算机数字化有一定的借鉴作用.本文作者还将继续研究这3种输入法的结合及如何利用西夏文部首输入西夏文的方法,最终实现基于IME的兼容性好的,能够提供模糊输入功能的西夏文计算机快速输入方法.参考文献:[1] 陈育宁.宁夏通史[M].银川:宁夏人民出版社,2008.[2] 顾绍通,马小虎,杨亦鸣.基于字形拓扑结构的甲骨文输入编码研究[J].中文信息学报,2008,22(4):123-128.[3] 李范文.夏汉字典[M].增订版.北京:中国社会科学出版社,2008.[4] 景永时,贾常业.西夏文字处理系统[CP/CD].银川:宁夏人民出版社,2007.[5] 亚森·艾则孜.基于HOOK技术的维吾尔文直接输入法的设计与实现[J].电脑编程技巧与维护,2006(4): 26-29.[6] 石京民,陈道敏.钩子及其应用[J].计算机应用,2001, 21(4):83-84.[7] 马希荣.夏汉字处理及电子字典[M].北京:清华大学出版社,1999.[8] 柳长青,马希荣.西夏字与汉字共存方案的实现[J].宁夏大学学报:自然科学版,2001,22(1):45-47.[9] 王静帆,邬晓钧,夏云庆,等.中文信息检索系统的模糊匹配算法研究和实现[J].中文信息学报,2007,21(6): 59-64.[10] 柳长青.基于IMM的汉字检索技术的应用[J].宁夏大学学报:自然科学版,2001,22(3):308-309.[11] 柳长青.网络下的西夏文及西夏文献处理研究[J].宁夏社会科学,2008(5):113-115.。

  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)即可。

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

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

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

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

相关文档
最新文档