找回密码
 加入
搜索
查看: 2688|回复: 14

[AU3基础] 确定包含某个控件的窗口【已解决】

  [复制链接]
发表于 2016-9-1 10:56:23 | 显示全部楼层 |阅读模式
本帖最后由 ysping 于 2016-9-2 08:35 编辑

请大家帮忙看看这个需求怎么处理:先检测是否存在某个控件,如何存在某个控件,再检测包含这个控件的窗口,然后将这个窗口关闭。
发表于 2016-9-1 11:28:15 | 显示全部楼层
感觉应该  检测这个控件的窗口存不存在 再关闭呢。
 楼主| 发表于 2016-9-1 11:32:41 | 显示全部楼层
回复 2# heroxianf


    这个怎么检测?只找到获取控件或获取窗口的函数
 楼主| 发表于 2016-9-1 11:34:21 | 显示全部楼层
回复 2# heroxianf


    必须是包含指定控件的窗口
发表于 2016-9-1 11:38:05 | 显示全部楼层
回复 4# ysping

你先用窗口查询工具看看信息,然后再看看什么情况下出现这个窗口。再操作就可以了。是我的话会这么试试。
 楼主| 发表于 2016-9-1 11:52:59 | 显示全部楼层
本帖最后由 ysping 于 2016-9-1 11:55 编辑

回复 5# heroxianf


    查看了,但是我不知道怎么判断“包含指定控件的窗口”。
 楼主| 发表于 2016-9-1 11:55:35 | 显示全部楼层
这个控件有时有,有时没有
发表于 2016-9-1 11:58:20 | 显示全部楼层
回复 7# ysping

检查指定控件 我就不太清楚了,等高手来。
 楼主| 发表于 2016-9-1 13:13:07 | 显示全部楼层
有个笨方法,把这个窗口的控件都列出来,判断有没有指定的控件。但是感觉这样太麻烦了,哪个函数可以获取指定控件的窗口?
发表于 2016-9-1 13:14:44 | 显示全部楼层
按道理来说,这个控件所属的窗口信息是固定的,比如窗口标题、窗口所属进程等信息都是恒久不变的,应该根据唯一信息先判断窗口是否存在,如果存在,再得到窗口所有控件,判断是否有某控件存在,从而根据需求是否关闭窗口。

如果你的情况真的是窗口名不确定、进程也不确定。在任何一个窗口上都可能出现这种控件,那需要扫描系统中所有窗口,得到窗口句柄后再扫描每个窗口的控件信息。

这些函数在帮助文档中都有示例的:

WinList
WinGetHandle
WinExists
WinGetClassList
 楼主| 发表于 2016-9-1 14:59:22 | 显示全部楼层
回复 10# nmgwddj


是这样的,因为有多个窗口的标题、文本是一样的,但是里面的控件不一样,需要根据指定控件找到控件所属的窗口,如果每个窗口都遍历一遍控件有些麻烦,我想知道有没有函数可以根据控件找到该控件所属的窗口。
没有的话,只有遍历所有控件来判断了。
谢谢!
发表于 2016-9-1 16:19:31 | 显示全部楼层
可以看看控件的文本信息之类的。
发表于 2016-9-1 17:10:37 | 显示全部楼层
Run("NOTEPAD.EXE")
WinWaitActive("[CLASS:Notepad]")
$h = ControlGetHandle("[CLASS:Notepad]", "", "Edit1")
$h2=DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $h)
Sleep(1000)
WinClose($h2[0])

如果知道窗口标题或类名,用GetParent获取控件父窗口句柄,然后关闭该句柄窗口。
 楼主| 发表于 2016-9-2 08:33:45 | 显示全部楼层
回复 13# vuivui


    知道了,谢谢!
 楼主| 发表于 2016-9-2 08:35:21 | 显示全部楼层
回复 13# vuivui


    知道了,我要的就是这个方法,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 00:23 , Processed in 0.234141 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表