• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >易语言 > 详解易语言的钩子(钩子HOOK与APIHOOK区别)

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

作者:易语言帮助手册 字体:[增加 减小] 来源:互联网 时间:2018-11-19

易语言帮助手册通过本文主要向大家介绍了易语言,钩子等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在本篇内容里我们给大家详细分析了易语言中间的钩子概念以及HOOK与APIHOOK区别

钩子 原英文名称 Hook ,钩子的意思是指拦截或截获。作用就是拦截程序中交互的数据,先经过我们预定的钩子处理接口程序,处理过后,再交还给原处理程序,或者干脆阻止,吃掉这些数据,让原处理程序什么也得不到。

钩子原来是Windows操作系统常用来检查系统与程序间通信的一些数据是否到达目标时用的,为不传之密,后来随着一些高手们的研究,逐渐的发现了这些秘密的技术并且公布了出来。同时还有更多的人在掌握了这些技术后,用在自已的软件开发中,实现出奇招而超过其它同类软件的功能而赢得市场。。 钩子技术的种类上很多.

HOOK API和HOOK技术完全不同。尽管它们都是钩子。HOOK钩的是消息,它在系统将消息传递给应用程序之前截获它,然后进行操作、或修改消息、或停止消息 的传递;

而HOOK API截获的是应用程序对系统API的调用,它在应用程序对系统API的调用之前截获此调用动作,让其转而调用我们所定义的函数(内容可能是进行一些操作 后再调用原系统API)。

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

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

WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。一共有两种类型的钩子:局部的和远程的。

局部钩子仅钩挂您自己进程的事件。

远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种:

基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。
系统范围的 将捕捉系统中所有进程将发生的事件消息。 当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。

钩子一共有14种,以下是它们被调用的时机:

WH_CALLWNDPROC 当调用SendMessage时
WH_CALLWNDPROCRET 当SendMessage的调用返回时
WH_GETMESSAGE 当调用GetMessage 或 PeekMessage时
WH_KEYBOARD 当调用GetMessage 或 PeekMessage 来从消息队列中查询WM_KEYUP 或 WM_KEYDOWN 消息时
WH_MOUSE 当调用GetMessage 或 PeekMessage 来从消息队列中查询鼠标事件消息时
WH_HARDWARE 当调用GetMessage 或 PeekMessage 来从消息队列种查询非鼠标、键盘消息时
WH_MSGFILTER 当对话框、菜单或滚动条要处理一个消息时。该钩子是局部的。它时为那些有自己的消息处理过程的控件对象设计的。
WH_SYSMSGFILTER 和WH_MSGFILTER一样,只不过是系统范围的
WH_JOURNALRECORD 当WINDOWS从硬件队列中获得消息时
WH_JOURNALPLAYBACK 当一个事件从系统的硬件输入队列中被请求时
WH_SHELL 当关于WINDOWS外壳事件发生时,譬如任务条需要重画它的按钮.
WH_CBT 当基于计算机的训练(CBT)事件发生时
WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的应用程序很少使用
WH_DEBUG 用来给钩子函数除错

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解易语言写ec模块的方法
  • 简单的易语言多线程应用实例
  • 易语言修改IE协议头留言手机版网页
  • 易语言拖放对象组件应用详解
  • 易语言dll文件传递字节集参数解析
  • 易语言目录框的目录被改变后取得改变后的目录并在编辑框中显示
  • 易语言操作硬盘txt扫描删除
  • 易语言模拟客户组件post发送数据
  • 易语言BUG及解决办法
  • 易语言设置在驱动器框中显示指定的驱动器类型

相关文章

  • 2018-11-19易语言赋值命令使用讲解
  • 2018-11-19易语言在编辑框中只允许输入指定类型内容的方法
  • 2018-11-19易语言部分重画与取消重画的使用方法
  • 2018-11-19总结易语言指针转换及调用方法
  • 2018-11-19将易程序转换为另一个语言版本的方法
  • 2018-11-19易语言设置在画板中绘画图形的刷子颜色
  • 2018-11-19易语言将画板中的图片输出为指定宽度和大小的图片
  • 2018-11-19易语言重定义数组命令使用讲解
  • 2018-11-19易语言基础教程之创建模块
  • 2018-11-19易语言取主机名命令使用讲解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 易语言组合框编辑内容被改变触发事件使用讲解
    • 零基础易语言入门教程(三)之了解控制台程序
    • 一步一步跟我学易语言之了解易语言的界面
    • 易语言修改组合框项目文本的方法
    • 易语言清除数组命令使用讲解
    • 易语言基础教程之条件选择结构
    • 易语言读环境变量命令使用讲解
    • 易语言指定从起始选择位置选中指定字符数量的方法
    • 如何让易语言的信息框总在最前
    • 一步一步跟我学易语言之循环语句

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有