关于等窗口获取失败的情况!【已解决】
本帖最后由 ttmv2019sx 于 2021-8-24 10:46 编辑A版,,请问一下,
winwait('Uninstall Microsoft Office','下一步(&N)',500)
这个命令,为什么在WIN7旗见,专业,WIN10企业版中基本上都是可以获取成功。正常下去
但是在WIN10家庭版中,失败率很高,10次中有3次没有找到这个窗口,
系统都是纯净的系统,没有多于的软件,请问一下,为什么只有Uninstall Microsoft Office这个名字的
窗口标题在运行的,没有其它软件在运行,也会获取失败呢,真不知道是什么引起的。
WinWait("'Uninstall Microsoft Office", "", 500)试下 smallan 发表于 2021-8-4 21:18
WinWait("'Uninstall Microsoft Office", "", 500)试下
哦,,好的,,这个我去试一下,,不过有一个问题,想请问一下,如果工具,各个不同的页面之间要来判断点击什么按钮,我是根据这个文字来判断的,如果文字中有A我就点A按钮,,如果是B,哪就点B按钮,如果你的这个文字取消了,这个要怎么判断,,是否是用控件上的文本来判断呢,? smallan 发表于 2021-8-4 21:18
WinWait("'Uninstall Microsoft Office", "", 500)试下
奇怪的,是WIN10的系统,只要是全新安装的,都是100%成功的,,唯 独,使用过一段时间后的电脑,会产生这个现象,哎,,而且,也会有几次成功的,,这个就是无法解释了。论坛里的风大,说是吧,下一步(&N)这几个字改成‘下一步’ 然后这个去试效果是一样的,,也是时灵时不灵, 等待窗口文本参数可以不写,也可以用类名来代替标题或者一起用更加准确识别,以前也试过这种情况 winwait是会阻断线程的,也可以改用WinExists来检测 风行者 发表于 2021-8-5 08:39
等待窗口文本参数可以不写,也可以用类名来代替标题或者一起用更加准确识别,以前也试过这种情况 winwait是 ...
哦,风大,上次你也和我说过的。我文字下一步(&N) 光是下一步,也是没有什么好的效果,,也是时好时坏,但是我全新安装的电脑的系统上,,次次,都是成功的,没有不成功的现象,还有,类名与标题我也试着,全加了,但是文本我还是保留的,,结果效果也是一样,我现在听你们的取消文本去试试,电脑有可能是发视经了,呵呵,,,,,,,,,,,,,,但是就如我上面请教的问题一样,就是文本取消了,我要如何去判断下一步窗口内的操作呢,本来只有有文本出来A了,,哪我就去操作A的路线走下去,,如果文本出来是B,我就走B的路径,,现在文本不用了,哪怎么去判断A路线与B路线呢? 风行者 发表于 2021-8-5 08:39
等待窗口文本参数可以不写,也可以用类名来代替标题或者一起用更加准确识别,以前也试过这种情况 winwait是 ...
而且,如果是光是标题与类名的话,,是不是直接用句柄更准确的,,比如说,获取进行的PID,然后转成句柄,然后再来判断窗口使用,,,,,,,,,现在不管是用句柄,还是类名与标题组合,,,,就是碰到了,要如何判断下一步的操作,,,,本来有文本的话,我都是判断到了这个文本的内容,就操作什么,现在文本没有了,就一头晕了,,小菜鸟,忘风大解一下,,谢谢 风行者 发表于 2021-8-5 08:39
等待窗口文本参数可以不写,也可以用类名来代替标题或者一起用更加准确识别,以前也试过这种情况 winwait是 ...
哦,对了,风大,,你在你的网页,还有在论坛里,有一个清理IE缓存的代码发布过,使用了后,,是隐藏清理的,但是有一个现象好像是不会清理,在IE中设置的兼容性列表的,不知道这个你有没有关注过 本帖最后由 风行者 于 2021-8-5 11:12 编辑
最好控件用类名代替文本,用窗口工具查就知道
_WinWait('Uninstall Microsoft Office', '下一步(&N)',5)
Func _WinWait($title, $text, $time)
For $i = 1 To $time
WinExists($title, $text) ? Return 1 : Sleep(1000)
Next
EndFunc
风行者 发表于 2021-8-5 10:53
最好控件用类名代替文本,用窗口工具查就知道
好的,风大,我先安你说的文本用类名去试试,谢谢 风行者 发表于 2021-8-5 10:53
最好控件用类名代替文本,用窗口工具查就知道
风大,,窗口得到的信息如下:
>>>> 窗口 <<<<
标题: Uninstall Microsoft Office
类名: NativeHWNDHost
坐标: 98, 116
大小: 585, 449
样式: 0x96C80080
Ex样式: 0x00040100
句柄: 0x0000000000030480
>>>> 控件 <<<<
类名: Button
接口: 1
高级类名: Button1
名称:
高级类:
ID:
文本: 下一步(&N)
坐标: 394, 378
大小: 90, 23
探测点坐标: 34, 11
样式: 0x50000001
Ex样式: 0x00000000
句柄: 0x000000000003043C
>>>> 鼠标 <<<<
坐标: 383, 132
光标 ID: 0
探测点颜色: 0xFFFFFF
>>>> 状态栏 <<<<
>>>> 工具栏 <<<<
>>>> 可见文本 <<<<
下一步(&N)
取消
>>>> 隐藏文本 <<<<
完成(&F)
联机阅读隐私声明
自动应用修复措施
我现在是这样写的,但是,你所指的,这个字本部分‘下一步(&N)’ 用类来顶替吗,但是加上类,判断就会失败的
WinWait('','下一步(&N)',2)
请问,这个文本要如何定义,才会更准确。上午你给的哪个代码,运行不下去,提示有问题
贴子不能沉下去呀,,哎,以前,同样用这个方式写的诺顿的卸载,就是一直OK的,没有像OFFICE卸载这样碰到奇怪的现象,等高手进来帮忙一下了, 风行者 发表于 2021-8-5 10:53
最好控件用类名代替文本,用窗口工具查就知道
风大,,可否,再帮忙分析一下,我上面已经把,哪个卸载软件的相关的窗口捕获的信息,贴出来了,你看看,是不是,还有什么更好的办法,来判断这个窗口 这个问题似乎折腾了几个月了…… 对于疑难杂症,要勤于添加调试代码
#include <Array.au3>
Local $hWin = _WinWaitDebug('Uninstall Microsoft Office', '下一步(&N)', 10) ;10秒内检测等待
If Not @error Then MsgBox(0, '已检测到窗口', $hWin)
Func _WinWaitDebug($sTitle, $sText = '', $iTimeout = 0)
Opt('WinTitleMatchMode', -1)
Local $hWin, $iTs = TimerInit()
If $iTimeout > 0 Then
$iTimeout *= 1000
Do
Sleep(100)
If TimerDiff($iTs) >= $iTimeout Then
Local $aList = WinList(), $aWShow, $ix = 0
For $i = 1 To $aList
If $aList[$i] <> '' And BitAND(WinGetState($aList[$i]), 2) Then
$ix += 1
$aWShow[$ix] = $aList[$i]
$aWShow[$ix] = $aList[$i]
EndIf
Next
If Not $ix Then Return SetError(2, 0, 0)
$aWShow = $ix
ReDim $aWShow[$ix + 1]
_ArrayDisplay($aWShow, '已超时,未检测到窗口.当前可见窗口')
Return SetError(1, 0, 0)
EndIf
$hWin = WinGetHandle($sTitle, $sText)
Until $hWin
Else
Do
Sleep(100)
$hWin = WinGetHandle($sTitle, $sText)
Until $hWin
EndIf
Return $hWin
EndFunc ;==>_WinWaitDebug afan 发表于 2021-8-6 10:47
这个问题似乎折腾了几个月了…… 对于疑难杂症,要勤于添加调试代码
好的,A版,,是的这个问题,弄了快2个月了,哎,不知道为什么楼下的电脑时灵时不灵的,奇了怪了,对了,A版,再请教一下,利用句柄来判断窗口操作的话,是不是绝对无可能,再有文本来加入来判断操作了,一切忽略了?