按键精灵 多层窗口如何抓取句柄

时间:2016/3/28 19:53:30  作者:Mho  来源:守望幸福  查看:56588  评论:0
内容摘要:多层窗口如何抓取句柄以及后台鼠标位置困扰了很多新手,我认为很多人疑惑后台鼠标位置其实主要问题还是在句柄的抓取问题上。

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

 


 

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) '这个是做了一个简单的鼠标右键点击的动作。

 

 


 

    第一步:抓你要操作的窗口的句柄,我们这里以360的IE窗口操作举例,抓句柄,用按键抓抓也行,用别的辅助工具也可,我用的窗口雷达,附了窗口雷达的程序,这里仅代表所有看帖受益者公开向窗口雷达的作者致以万分非常的感谢。

 

按键精灵_多层窗口如何抓取句柄

 

第二步:写程序:

 


 

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

 


 

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

 

第三步:分别找到大哥和二哥

 


 

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

 


 

第四步:

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

 


Hwnd = Plugin.Window.FindEx(HF2, 0, "Internet Explorer_Server", 0)

 


不正确的找法如下:

 


 

Hwnd = Plugin.Window.FindEx(HF, 0, "Internet Explorer_Server", 0)

 


 

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

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

 

按键精灵_多层窗口如何抓取句柄

 

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

按键精灵_多层窗口如何抓取句柄

 

 

 

 

 

 

 


相关评论

图库精选