学会用按键精灵获取子窗口句柄

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学会用按键精灵获取子窗口句柄

来源:按键学院【按键精灵】电脑的桌面是最顶级的窗口,在桌面里的其他程序窗口是桌面的子窗口。那到底父窗口和子窗口是怎么理解的呢?

【父窗口与子窗口】

每一个窗体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)

TracePrint zhwnd

结果:

【父窗口对应多个子窗口】

1、多个子窗口的类名或标题不一样

拿有道云笔记窗口作为例子:

它的这两个子窗口的类名标题都不一样,这样的情况我们按照前面介绍的父窗口下只有一个子窗口的方式来查找就可以了。

代码:

hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")

zhwnd = Plugin.Window.findex(hwnd, 0, "NETEASE POPO2007 List", 0)

TracePrint zhwnd

结果:

2、多个子窗口的类名或标题一样

有道云笔记下的这两个子窗口的类名、标题都是一样的。

hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")

HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0) 上面的代码只能找到第一个类名为Popo.UI.Controls.Class.SkinSplitter的子窗口,第二个无法找到。这样的情况,该怎么找第二个呢?

相关文档
最新文档