加载中…
个人资料
宋习侠
宋习侠
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,169
  • 关注人气:78
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

软件开发之-按键精灵中多层窗口抓取句柄及后台鼠标解决方案

(2012-05-06 14:50:02)
标签:

句柄

窗口

后台

按键精灵

多层窗口如何抓取句柄以及后台鼠标位置困扰了很多新手,我认为很多人疑惑后台鼠标位置其实主要问题还是在句柄的抓取问题上。
先附上代码

HF = Plugin.Window.Find("Container", 0) 'HF是我定义的总父窗口的变量,窗口句柄的变量名是可以自己随意取的

HF1 = Plugin.Window.FindEx(HF, 0, "Shell Embedding", 0) '下一层窗口

HF2 = Plugin.Window.FindEx(HF1, 0, "Shell DocObject View", 0) '下下一层窗口

Hwnd = Plugin.Window.FindEx(HF2, 0, "Internet Explorer_Server", 0)'我们主要操作的窗口,我把变量名起为Hwnd,因为按键后台命令的句柄默认是Hwnd,我懒得每次都改了。

MessageBox "HF:" & HF & ",HF1:" & HF1 & ",HF2:" & HF2 & ",Hwnd:" & Hwnd '把句柄读取出来看看是否正确

Call Plugin.Bkgnd.RightClick(Hwnd, 133, 86) '这个是做了一个简单的鼠标右键点击的动作。

'技术交流或者定制脚本可联系QQ1445793928,本人平时工作忙,过于小白的问题请先自行思考,查询解决,我也许没空回复,先请谅!

  1. HF = Plugin.Window.Find("Container", 0) 'HF是我定义的总父窗口的变量,窗口句柄的变量名是可以自己随意取的
  2. HF1 = Plugin.Window.FindEx(HF, 0, "Shell Embedding", 0) '下一层窗口
  3. HF2 = Plugin.Window.FindEx(HF1, 0, "Shell DocObject View", 0) '下下一层窗口
  4. Hwnd = Plugin.Window.FindEx(HF2, 0, "Internet Explorer_Server", 0)'我们主要操作的窗口,我把变量名起为Hwnd,因为按键后台命令的句柄默认是Hwnd,我懒得每次都改了。
  5. MessageBox "HF:" & HF & ",HF1:" & HF1 & ",HF2:" & HF2 & ",Hwnd:" & Hwnd '把句柄读取出来看看是否正确
  6. Call Plugin.Bkgnd.RightClick(Hwnd, 133, 86) '这个是做了一个简单的鼠标右键点击的动作。
  7. '技术交流或者定制脚本可联系QQ1445793928,本人平时工作忙,过于小白的问题请先自行思考,查询解决,我也许没空回复,先请谅!

第一步:抓你要操作的窗口的句柄,我们这里以360的IE窗口操作举例,抓句柄,用按键抓抓也行,用别的辅助工具也可,我用的窗口雷达,附了窗口雷达的程序,这里仅代表所有看帖受益者公开向窗口雷达的作者致以万分非常的感谢。
http://bbs.anjian.com/static/image/filetype/rar.gif 窗口雷达.rar (8.24 KB, 下载次数: 859)
http://bbs.anjian.com/forum.php?mod=attachment&aid=NTc1Njl8ZmIzOTY1Yzd8MTMzNjI4Njk1Mnw2MjYyNDV8MjIxNjU1&noupdate=yes  

第二步:写程序:
  1. HF = Plugin.Window.Find("Container", 0) 'HF是我定义的总父窗口的变量,窗口句柄的变量名是可以自己随意取的
复制代码


我们看到雷达窗口抓了我么要获取的句柄有3个父句柄,先找到最上一层的父句柄

第三步:分别找到大哥和二哥
  1. HF1 = Plugin.Window.FindEx(HF, 0, "Shell Embedding", 0) '下一层窗口
  2. HF2 = Plugin.Window.FindEx(HF1, 0, "Shell DocObject View", 0) '下下一层窗口

    第四步:
    找到我们要操作的窗口句柄,他的父句柄其实就是HF2,但是HF2又不能直接用Find命令找到,所以要这样逐层的查找。很多新手常见错误就是直接通过HF这个总父句柄来找第三层第四层的句柄,当然找不到了。
    正确的找法如下:
  1. Hwnd = Plugin.Window.FindEx(HF2, 0, "Internet Explorer_Server", 0)


不正确的找法如下:
  1. Hwnd = Plugin.Window.FindEx(HF, 0, "Internet Explorer_Server", 0)


找准确了句柄以后,后台鼠标位置问题就迎刃而解。

第五步:打开按键抓抓,指定窗口句柄截图。

http://bbs.anjian.com/forum.php?mod=attachment&aid=NTc1NzB8MjkwNDA1ZjR8MTMzNjI4Njk1Mnw2MjYyNDV8MjIxNjU1&noupdate=yes  

第六步:不要再重新定义起始坐标了,在你要操作的位置点右键抓点,抓好点的x,y坐标就是正确的坐标
Call Plugin.Bkgnd.RightClick(Hwnd, 133, 86),不需要再去更改了,你抓的点是133, 86,你就写133, 86,就这么简单。


http://bbs.anjian.com/forum.php?mod=attachment&aid=NTc1NzF8OWI2Mjc0MzZ8MTMzNjI4Njk1Mnw2MjYyNDV8MjIxNjU1&noupdate=yes  





第七步:再次声明:技术交流或者定制脚本可联系QQ1445793928,本人平时工作忙,过于小白的问题请先自行思考,查询解决,我也许没空回复,先请谅!

如果我写的还不够明白,可以回帖咨询,看到了就会回复,过于小白的问题,我的意思是,您没有动脑子思考就问的问题,在下不会回复,毕竟回答没有脑子的问题是最累的。

本帖在按键精灵官网发帖地址:

http://bbs.anjian.com/thread-221655-1-1.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有