易语言纯系统API实现全局鼠标键盘钩子监听

易语言纯系统API实现全局鼠标键盘钩子监听-可达鸭小栈
易语言纯系统API实现全局鼠标键盘钩子监听
此内容为付费资源,请付费后查看
20积分
积分资源免费
付费资源可享->
免费更新
协助部署
在线答疑
付费资源

前言

在Windows应用程序开发中,全局钩子(Hook)是一项强大的技术,允许我们监视系统中的特定事件。本文将详细介绍如何使用易语言调用Windows API函数SetWindowsHookEx来实现全局鼠标和键盘钩子,从而监听系统的鼠标键盘消息。 下面是讲解和部分代码 完整代码上方下载可直接运行 不需要任何模块

技术原理

SetWindowsHookEx是Windows API中用于安装钩子过程的重要函数。通过它,我们可以安装各种类型的钩子,其中:

  • 键盘钩子(WH_KEYBOARD_LL,值为13):监视低级键盘输入事件

  • 鼠标钩子(WH_MOUSE_LL,值为14):监视低级鼠标输入事件

这两个钩子类型属于全局钩子,即使应用程序没有焦点,也能捕获系统的键盘鼠标消息。

1. 程序集变量声明

.程序集 窗口程序集_窗口1
.程序集变量 键盘钩子, 整数型
.程序集变量 鼠标钩子, 整数型

这里声明两个整数型变量,用于保存安装的钩子句柄。后续卸载钩子时需要用到这些句柄。

2. 安装钩子

.子程序 _按钮1_被单击

键盘钩子 = SetWindowsHookEx (13, &键盘钩子回调函数, GetModuleHandle (0), 0)
鼠标钩子 = SetWindowsHookEx (14, &鼠标钩子回调函数, GetModuleHandle (0), 0)

SetWindowsHookEx参数说明:

  • 第一个参数:钩子类型,13表示键盘钩子,14表示鼠标钩子

  • 第二个参数:回调函数地址,使用&取函数地址

  • 第三个参数:模块句柄,GetModuleHandle(0)获取当前应用程序实例句柄

  • 第四个参数:线程ID,0表示全局钩子,监视所有线程\

3. 卸载钩子

.子程序 _按钮2_被单击

UnHookWindowsHookEx (键盘钩子)
UnHookWindowsHookEx (鼠标钩子)

主要函数代码较长就不一段一段发了下面时完整的代码

.版本 2
.支持库 spec

.程序集 窗口程序集_窗口1, , , www.ikdya.com
.程序集变量 键盘钩子, 整数型
.程序集变量 鼠标钩子, 整数型

.子程序 _按钮1_被单击

键盘钩子 = SetWindowsHookEx (13, &键盘钩子回调函数, GetModuleHandle (0), 0)
鼠标钩子 = SetWindowsHookEx (14, &鼠标钩子回调函数, GetModuleHandle (0), 0)


.子程序 _按钮2_被单击

UnHookWindowsHookEx (键盘钩子)

UnHookWindowsHookEx (鼠标钩子)


.子程序 键盘钩子回调函数, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型, , 256=按下,257=放开
.参数 参数三, 整数型
.局部变量 键值, 整数型, , , 键代码

键值 = 取字节集数据 (指针到字节集 (参数三, 1), 3, )
调试输出 (“键盘操作”, 参数二, 键值) ' 256是按下  257是松开
返回 (CallNextHookEx (鼠标钩子, 参数一, 参数二, 参数三))

.子程序 鼠标钩子回调函数, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型, , 消息类型
.参数 参数三, 整数型
.局部变量 鼠标, MOUSEHOOKSTRUCT

CopyMemory (鼠标, 参数三, 20)

.如果真 (参数二 = 512)  ' 鼠标移动
    调试输出 (“鼠标移动了”, 参数二, 鼠标.pt.X, 鼠标.pt.Y)
.如果真结束
.如果真 (参数二 ≠ 512)  ' 如果不是移动消息 那么就是点击消息  513左键按下 514左键松开 516右键按下  517右键松开
    .判断开始 (参数二 = 522)  ' 判断是点击还是移动
        调试输出 (“滚轮操作”, 参数二, 鼠标.hwnd, )  ' 鼠标滚轮消息
    .默认
        调试输出 (“点击操作”, 参数二, 鼠标.pt.X, 鼠标.pt.Y)  ' 鼠标点击消息
    .判断结束

.如果真结束
返回 (CallNextHookEx (鼠标钩子, 参数一, 参数二, 参数三))

运行截图

QQ20260309-180921

© 版权声明
THE END
看完了?看完了愣着啊点赞干什么
点赞8赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容