开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 105142|回复: 372
收起左侧

[图文资料] 易语言【全局】【键盘、鼠标钩子(hook)】教程【纯API不用模块!】

  [复制链接]
结帖率:0% (0/1)
发表于 2012-7-28 17:25:32 | 显示全部楼层 |阅读模式   广西壮族自治区南宁市
本帖最后由 a405544641 于 2012-7-28 18:33 编辑

.版本 2
.DLL命令 GetModuleHandle, 整数型, , "GetModuleHandleA", , 获取句柄
    .参数 lpModuleName, 整数型
.DLL命令 CallNextHookEx, 整数型, , "CallNextHookEx", , 下一个钩子
    .参数 hhk, 整数型
    .参数 nCode, 整数型
    .参数 wParam, 整数型
    .参数 lParam, 整数型
.DLL命令 SetWindowsHookEx, 整数型, , "SetWindowsHookExA", , 创建钩子
    .参数 idHook, 整数型
    .参数 lpfn, 子程序指针
    .参数 hmod, 整数型
    .参数 dwThreadId, 整数型
.DLL命令 UnHookWindowsHookEx, 逻辑型, , "UnhookWindowsHookEx", , 卸载钩子
    .参数 hhk, 整数型
.DLL命令 WindowFromPoint, 整数型, "user32", "WindowFromPoint", , 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口  包含了指定点的窗口的句柄。如指定的点处没有窗口存在,则返回零
    .参数 xPoint, 整数型, , x点值
    .参数 yPoint, 整数型, , y点值;
.DLL命令 CopyMemory, , , "RtlMoveMemory", , 拷贝内存
    .参数 Destination, MOUSEHOOKSTRUCT, 传址
    .参数 Source, 整数型
    .参数 Length, 整数型

GetModuleHandle()是获取一个应用程序或动态链接库的模块句柄。。不要想太多...
第二个是呼叫下一个钩子。
第三个是创建钩子
4:卸载钩子
5:返回坐标处的窗口句柄
6:拷贝内存
然后新建一个自定义数据类型。等下用的。
.版本 2
.数据类型 MOUSEHOOKSTRUCT
    .成员 pt, POINT
    .成员 hwnd, 整数型
    .成员 wHitTestCode, 整数型
    .成员 dwExtraInfo, 整数型
.数据类型 POINT
    .成员 X, 整数型
    .成员 Y, 整数型

然后可以开始写代码了。。。创建2个程序集变量。用来保存键盘钩子和鼠标钩子的代号的 未命名.jpg 。   然后创建2个回调函数。鼠标钩子和键盘钩子的回调函数。返回值都是 整数型。都有三个参数。 QQ截图20120728163252.jpg 。接下来可以写_启动窗口_创建完毕()的代码了。
要创建2个钩子一个键盘钩子。一个鼠标钩子。首先介绍一下创建钩子的命令。 QQ截图20120728163425.jpg 第一个参数是钩子类型。全局鼠标是14.键盘是13.第二个是子程序指针。。也就是提供刚才我们创建的那两个函数的指针。&是求指针符号。
第三是句柄。填GetModuleHandle(0)就行。第四个填0. QQ截图20120728163742.jpg 这是图。


然后开始弄回调函数。。先弄键盘钩子的。键盘钩子函数的第二个参数是状态。256按下。257弹起。参数三是键值的指针。注意。。只是指针。我们要把它换成键值。首先新建一个局部变量整数型的键值。然后需要这两个命令。

取字节集数据 (, , )
指针到字节集 (, )

首先是指针到字节集 (, )  第一个参数是指针。填 参数三。  第二个填1。因为键值是一个整数。在字节集里占1位。
然后取字节集数据  第一个参数就是 指针到字节集 (参数三,1 )    我们要取整数型的键值所以第二个参数填3.第三个不填
OK。这样键代码就被我们取出来了有了键值可以好好玩玩了
QQ截图20120728172233.jpg



比如。。.
QQ截图20120728171128.jpg


ok写完了代码。。不过别忘记。这个函数可是有返回值的。。返回什么呢?这么写   QQ截图20120728171235.jpg 也就是呼叫下一个钩子。。

ok键盘弄完。弄弄鼠标的。同样。参数三里面有鼠标的坐标。参数二是类型。我只记得512是鼠标移动。513是左单击。具体你们可以调试输出一下参数二。然后看看参数值就懂了。首先我们要把鼠标的坐标取到吧?
现在就来取。
首先新建一个MOUSEHOOKSTRUCT类型的鼠标变量。。。这回自定义数据类型用上了。
QQ截图20120728171524.jpg 然后开始写代码。这回就需要用上   CopyMemory()这个API了。拷贝内存用的
第一个参数填鼠标。。也就是我们刚才创的变量。第二个要填参数三。第三个填20.
然后坐标数据就在变量里了。           横坐标 在     鼠标.pt.x中   纵坐标在鼠标.pt.x。
知道了坐标。这下又可以好好玩玩了。 QQ截图20120728172009.jpg 。这样鼠标一移动就调试输出坐标。
好啦。还是要 调用下一个钩子。
QQ截图20120728172349.jpg ..然后还没完。。。不卸载钩子...可不行。 QQ截图20120728172435.jpg    结束~好好玩玩吧…………{:soso_e113:}


传一下附件:

附件.zip (106.9 KB, 下载次数: 6538)
QQ截图20120728171000.jpg

点评

鼠标ID也是14不是12呀==   广东省潮州市  发表于 2017-4-20 23:01
粗心了,键盘回调弄成鼠标的,鼠标弄成键盘的。   广东省潮州市  发表于 2017-4-20 22:57
键盘回调函数里面的参数一是干嘛的啊   江苏省盐城市  发表于 2014-4-28 11:58

评分

参与人数 4好评 +3 精币 +8 收起 理由
xintian + 1 + 1 支持开源~!感谢分享
woaishei19 + 1 支持开源~!感谢分享
九黎长庚多多 + 1 + 1 虽然马虎了还是可以哒,支持一下
冰点 + 1 + 5 奉上小小红包希望笑纳

查看全部评分


结帖率:100% (6/6)
发表于 2012-7-28 17:27:27 | 显示全部楼层   福建省泉州市
    差不多。
回复 支持 反对

使用道具 举报

发表于 2012-7-28 18:06:49 | 显示全部楼层   广东省深圳市
没有附件的吗?
回复 支持 反对

使用道具 举报

发表于 2012-7-30 18:48:01 | 显示全部楼层   湖南省长沙市
好东西,学习学习
回复 支持 反对

使用道具 举报

结帖率:74% (26/35)

签到天数: 19 天

发表于 2012-8-3 16:06:25 | 显示全部楼层   四川省内江市
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2012-8-5 08:58:13 | 显示全部楼层   福建省莆田市
实现什么功能,没看明白
回复 支持 反对

使用道具 举报

发表于 2012-8-18 10:27:52 | 显示全部楼层   辽宁省锦州市
回复 支持 反对

使用道具 举报

签到天数: 19 天

发表于 2012-8-18 19:32:48 | 显示全部楼层   广东省江门市
真不错。学习一下。谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2012-8-21 11:19:12 | 显示全部楼层   湖北省孝感市
支持!!!!
回复 支持 反对

使用道具 举报

发表于 2012-8-25 07:12:49 | 显示全部楼层   湖南省怀化市
必须要··························
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表