• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

返回列表 12345678» / 13
发新话题 回复该主题

[技术交流] 【院刊】-【201409期】获取子窗口句柄遇到的多种情况 [复制链接]

1#

获取子窗口句柄遇到的多种情况


电脑的桌面是最顶级的窗口,在桌面里的其他程序窗口是桌面的子窗口。那到底父窗口和子窗口是怎么理解的呢?


父窗口与子窗口



每一个窗体form都是一个父窗口,它不是其他任一个窗体的子窗口.窗体上的所有控件,按钮等就是窗体的子窗口.一个窗口(除了窗体)既可能是父窗口,也可能是子窗口.比如窗体里面有一个frame,frame里面的控件就是frame的子窗口,但frame同时也是窗体的子窗口.就像容器里面装着容器.最大的那个容器就是窗体.每一个容器里面的东西就是其子窗口.


常见的父窗口和子窗口的关系


[backcolor=rgb(245, 222, 179)]


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



1、有类名没有标题(有标题没有类名)
例如:记事本,它只有一个子窗口,子窗口只有类名没有标题。


您所在的用户组无法下载或查看附件



我们要如何查找获取到这个子窗口的句柄呢?
首先,我们先复习下按键里的获取子窗口句柄的命令。


命令名称: FindEx 查找子窗口
命令功能: 根据父窗口句柄查找子窗口匹配类名或者匹配标题
命令参数: 参数1 整数型,父窗口句柄
参数2 整数型,子窗口句柄
参数3 字符串型,匹配类名
参数4 字符串型,匹配标题



㈠ 先要获取父窗口的句柄,然后根据父窗口的句柄来找子窗口。
记事本父窗口的标题是:无标题 - 记事本 类名是:Notepad
  1. hwnd= Plugin.Window.find("Notepad" ,"无标题 - 记事本") //获取记事本父窗口句柄
复制代码

㈡ 获取到父窗口句柄之后,我们还需要知道子窗口的类名,类名为:Edit
  1. zhwnd = Plugin.Window.findex(hwnd, 0, "Edit", 0) //获取子窗口句柄
复制代码

*这里子窗口句柄的值设置为0,可能会有很多童鞋很困惑,findex命令不就是获取子窗口句柄的吗?那这里还设置一个子窗口句柄的值干嘛?我要知道还要用findex来找吗?

小编刚接触这个命令的时候,对于这个参数也非常疑惑,后来发现是这样的:
findex命令里的子窗口句柄,指的是当前要查找的子窗口上面一个子窗口的句柄。


您所在的用户组无法下载或查看附件



例如上图:当我们要找创建时间这个子窗口的时候,findex命令里的子窗口句柄参数就设置为红框里子窗口的句柄。




2、没有类名也没有标题
父窗口下只有一个子窗口的情况,标题和类名不设置是可以的。
  1. hwnd= Plugin.Window.find(0,"无标题 - 记事本")
  2. zhwnd = Plugin.Window.findex(hwnd, 0, 0, 0)
  3. TracePrint zhwnd
复制代码
结果:

您所在的用户组无法下载或查看附件









父窗口对应多个子窗口

1、多个子窗口的类名或标题不一样
拿有道云笔记窗口作为例子:



您所在的用户组无法下载或查看附件




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


代码:
  1. hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")
  2. zhwnd = Plugin.Window.findex(hwnd, 0, "NETEASE POPO2007 List", 0)
  3. TracePrint zhwnd
复制代码
结果:

您所在的用户组无法下载或查看附件





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



您所在的用户组无法下载或查看附件




有道云笔记下的这两个子窗口的类名、标题都是一样的。
  1. hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")
  2. HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)
复制代码
上面的代码只能找到第一个类名为[backcolor=rgb(247, 247, 247)]Popo.UI.Controls.Class.SkinSplitter[backcolor=rgb(247, 247, 247)]的子窗口,第二个无法找到。 这样的情况,该怎么找第二个呢?

在前面我们提到过,findex里的子窗口句柄这个参数,在这里我们就可以利用它。


思路如下:
1、获取父窗口句柄
2、获取第一个子窗口句柄
3、根据父窗口句柄以及第一个子窗口句柄,获取第二个子窗口句柄

代码:
  1. hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")
  2. HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)
  3. TracePrint HwndEx
  4. HwndEx = Plugin.Window.findex(hwnd, HwndEx, "Popo.UI.Controls.Class.SkinSplitter", 0)
  5. TracePrint HwndEx
复制代码

结果:

您所在的用户组无法下载或查看附件




子窗口下还有子窗口

例如按键抓抓窗口:


您所在的用户组无法下载或查看附件
您所在的用户组无法下载或查看附件



抓抓父窗口下类名为#32770的子窗口,它还有它的子窗口,我们如果要找#32770的子窗口下标题为句柄的窗口,该如何查找呢?


思路:
1、获取抓抓父窗口句柄
2、根据父窗口句柄找#32770的子窗口句柄
3、以#32770的子窗口作为父窗口, 继续查找下一级子窗口

代码:
  1. hwnd= Plugin.Window.find(0,"按键抓抓辅助工具2014.00.14006")
  2. zhwnd = Plugin.Window.findex(hwnd, 0, "#32770", 0)
  3. zzhwnd = Plugin.Window.findex(zhwnd, 0, 0, "句柄")
  4. TracePrint zzhwnd
复制代码
结果:

您所在的用户组无法下载或查看附件




大伙儿如果有遇到获取不了子窗口句柄的情况,欢迎跟帖一起讨论~~~


本文由按键学院提供技术支持


按键学院实战班(入驻最终幻想)火热招生


按键学院基础视频抢先观看


    已有4评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/10/14 9:55:17 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    一时半会儿弄不懂

    3#

    看看是啥

    4#

    学习一下窗口插件的用法

    5#

    感谢学院,这正是我想学习的!!!!!!!!

    6#

    感谢分享!!!

    7#

    111111111111111

    8#


    9#

    不顶不道德

    10#

    1111111111111

    11#

    向楼主学习 我要加油了

    12#


    13#

    要回复吗,累啊

    14#

    我爱学习,学习使我快乐

    15#

    感谢学院,这正是我想学习的!!!!!!!!!!

    16#


    17#

    谢谢

    18#

    666666

    19#

    有这方面的困惑,补习一下

    20#

    常见的父窗口和子窗口的关系

    发新话题 回复该主题