易语言实地培训长期招生 QQ1615457736

乐易论坛

 找回密码
 立即注册

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

导航
导航
培训
培训
产品
产品
易歪歪客服聊天助手——永久免费阿里云服务器最高¥1888云产品通用代金券我要租广告
易歪歪客服聊天助手——永久免费阿里云服务器低至10元/月我要租广告
易歪歪客服聊天助手——永久免费最高2000云产品通用代金券我要租广告
查看: 10015|回复: 1
收起左侧

[网络教程] 转,易语言【全局】【键盘、鼠标钩子(hook)】教程【纯API不用模块!】

[复制链接]
  • TA的每日心情

    2018-11-7 20:28
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2017-3-6 21:04:06 | 显示全部楼层 |阅读模式

    乐易编程网免费注册!抓住机会哦!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 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个程序集变量。用来保存键盘钩子和鼠标钩子的代号的 1630246771qurx6j61uhrz.jpg


    。   然后创建2个回调函数。鼠标钩子和键盘钩子的回调函数。返回值都是 整数型。都有三个参数。 16321316xij0252az250cj.jpg



    。接下来可以写_启动窗口_创建完毕()的代码了。
    要创建2个钩子一个键盘钩子。一个鼠标钩子。首先介绍一下创建钩子的命令。 163336yese13sjgy3lnln5.jpg



    第一个参数是钩子类型。全局鼠标是14.键盘是13.第二个是子程序指针。。也就是提供刚才我们创建的那两个函数的指针。&是求指针符号。
    第三是句柄。填GetModuleHandle(0)就行。第四个填0. 163651nj5c1t51xjzeexgz.jpg



    这是图。


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

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

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







    比如。。.
    17104829hib2ru3iwe9a62.jpg






    ok写完了代码。。不过别忘记。这个函数可是有返回值的。。返回什么呢?这么写    171155h8kch1athddm2gm2.jpg


    也就是呼叫下一个钩子。。

    ok键盘弄完。弄弄鼠标的。同样。参数三里面有鼠标的坐标。参数二是类型。我只记得512是鼠标移动。513是左单击。具体你们可以调试输出一下参数二。然后看看参数值就懂了。首先我们要把鼠标的坐标取到吧?
    现在就来取。
    首先新建一个MOUSEHOOKSTRUCT类型的鼠标变量。。。这回自定义数据类型用上了。
    1714479h6pidk2vddfdxfd.jpg



    然后开始写代码。这回就需要用上   CopyMemory()这个API了。拷贝内存用的
    第一个参数填鼠标。。也就是我们刚才创的变量。第二个要填参数三。第三个填20.
    然后坐标数据就在变量里了。           横坐标 在     鼠标.pt.x中   纵坐标在鼠标.pt.x。
    知道了坐标。这下又可以好好玩玩了。 171930f464ej6eeo6mad4q.jpg



    。这样鼠标一移动就调试输出坐标。
    好啦。还是要 调用下一个钩子。
    1723088ew26h8955vjh88z.jpg



    ..然后还没完。。。不卸载钩子...可不行。 172355zccnzrcr33lfnkc6.jpg



       结束~好好玩玩吧…………

                                   
    登录/注册后可看大图










    170922xqtwa6clczz501mq.jpg



    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-9-28 16:40
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2017-4-22 12:58:27 | 显示全部楼层
    拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    乐易推荐上一条 /6 下一条

    QQ|网站地图|Archiver|手机版|小黑屋|乐易论坛 ( 湘ICP备19007035号-2 )

    GMT+8, 2019-8-21 09:30 , Processed in 0.095285 second(s), 66 queries , Redis On.

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

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