学会用按键精灵获取子窗口句柄
的有关信息介绍如下:电脑的桌面是最顶级的窗口,在桌面里的其他程序窗口是桌面的子窗口。那到底父窗口和子窗口是怎么理解的呢?
【父窗口与子窗口】
每一个窗体form都是一个父窗口,它不是其他任一个窗体的子窗口.窗体上的所有控件,按钮等就是窗体的子窗口.一个窗口(除了窗体)既可能是父窗口,也可能是子窗口.比如窗体里面有一个frame,frame里面的控件就是frame的子窗口,但frame同时也是窗体的子窗口.就像容器里面装着容器.最大的那个容器就是窗体.每一个容器里面的东西就是其子窗口.
【常见的父窗口和子窗口的关系】
【父窗口对应一个子窗口】
1、有类名没有标题(有标题没有类名)
例如:记事本,它只有一个子窗口,子窗口只有类名没有标题。
我们要如何查找获取到这个子窗口的句柄呢?
首先,我们先复习下按键里的获取子窗口句柄的命令。
命令名称:
FindEx查找子窗口
命令功能:
根据父窗口句柄查找子窗口匹配类名或者匹配标题
命令参数:
参数1整数型,父窗口句柄
参数2整数型,子窗口句柄
参数3字符串型,匹配类名
参数4字符串型,匹配标题
㈠先要获取父窗口的句柄,然后根据父窗口的句柄来找子窗口。
记事本父窗口的标题是:无标题-记事本类名是:Notepad
hwnd=Plugin.Window.find("Notepad","无标题-记事本")//获取记事本父窗口句柄
㈡获取到父窗口句柄之后,我们还需要知道子窗口的类名,类名为:Edit
zhwnd=Plugin.Window.findex(hwnd,0,"Edit",0)//获取子窗口句柄
*这里子窗口句柄的值设置为0,可能会有很多童鞋很困惑,findex命令不就是获取子窗口句柄的吗?那这里还设置一个子窗口句柄的值干嘛?我要知道还要用findex来找吗?
小编刚接触这个命令的时候,对于这个参数也非常疑惑,后来发现是这样的:
findex命令里的子窗口句柄,指的是当前要查找的子窗口上面一个子窗口的句柄。
例如上图:当我们要找创建时间这个子窗口的时候,findex命令里的子窗口句柄参数就设置为红框里子窗口的句柄。
2、没有类名也没有标题
父窗口下只有一个子窗口的情况,标题和类名不设置是可以的。
hwnd=Plugin.Window.find(0,"无标题-记事本")
zhwnd=Plugin.Window.findex(hwnd,0,0,0)
TracePrintzhwnd
结果:
【父窗口对应多个子窗口】
1、多个子窗口的类名或标题不一样
拿有道云笔记窗口作为例子:
它的这两个子窗口的类名标题都不一样,这样的情况我们按照前面介绍的父窗口下只有一个子窗口的方式来查找就可以了。
代码:
hwnd=Plugin.Window.find(0,"有道云笔记Haiye")
zhwnd=Plugin.Window.findex(hwnd,0,"NETEASEPOPO2007List",0)
TracePrintzhwnd
结果:
2、多个子窗口的类名或标题一样
有道云笔记下的这两个子窗口的类名、标题都是一样的。
hwnd=Plugin.Window.find(0,"有道云笔记Haiye")
HwndEx=Plugin.Window.findex(hwnd,0,"Popo.UI.Controls.Class.SkinSplitter",0)
上面的代码只能找到第一个类名为Popo.UI.Controls.Class.SkinSplitter的子窗口,第二个无法找到。这样的情况,该怎么找第二个呢?
在前面我们提到过,findex里的子窗口句柄这个参数,在这里我们就可以利用它。
思路如下:
1、获取父窗口句柄
2、获取第一个子窗口句柄
3、根据父窗口句柄以及第一个子窗口句柄,获取第二个子窗口句柄
代码:
hwnd=Plugin.Window.find(0,"有道云笔记Haiye")
HwndEx=Plugin.Window.findex(hwnd,0,"Popo.UI.Controls.Class.SkinSplitter",0)
TracePrintHwndEx
HwndEx=Plugin.Window.findex(hwnd,HwndEx,"Popo.UI.Controls.Class.SkinSplitter",0)
TracePrintHwndEx
结果:
【子窗口下还有子窗口】
例如按键抓抓窗口:
抓抓父窗口下类名为#32770的子窗口,它还有它的子窗口,我们如果要找#32770的子窗口下标题为句柄的窗口,该如何查找呢?
思路:
1、获取抓抓父窗口句柄
2、根据父窗口句柄找#32770的子窗口句柄
3、以#32770的子窗口作为父窗口,继续查找下一级子窗口
代码:
hwnd=Plugin.Window.find(0,"按键抓抓辅助工具2014.00.14006")
zhwnd=Plugin.Window.findex(hwnd,0,"#32770",0)
zzhwnd=Plugin.Window.findex(zhwnd,0,0,"句柄")
TracePrintzzhwnd
结果: