[已解决]用autoit编写的脚本停止在源程序提示窗口,不往下执行,请指教!
本帖最后由 老不懂 于 2016-9-13 12:37 编辑我用autoit自动化处IE重复录入工作,确定URL、获得FORM、控件,填写文本后,按“写入”按钮提交_IEAction($oSubmit, "click"),这时源程序弹出一个提示窗口,TITLE是"提示信息",中间的文字是“你是否确认提交?”,下面是两个按钮“确定”、“取消”。用AUTOIT INFO查看窗口的CLASS是#32770,无论我用下面的那个语句,都无法获得提示窗口,也就无法send("{SPACE}")或ControlClick“确定”按钮。
WinWaitActive("提示信息","你是否确认提交?",5)
WinWaitActive("","你是否确认提交?",5)
WinWaitActive("","")
WinActivate("提示信息","你是否确认提交?")
WinActivate("")
而我autoit打开notepad,send几个汉字,关闭窗口,这里notepad触发一个#32770提示窗口,问是否保存,我用上面的语句都能获得窗口,并控制选择保存与否。
后来我在提交_IEAction($oSubmit, "click")之后,立即加一句MsgBox,发现脚本根本就走不到MsgBox这句,脚本停在了提示窗口。我手工点击提示窗口中的“确定”,脚本是可以正确走完的。上网查了很多,没有找到解决方案。到是有提醒用Opt("TrayIconDebug", 1) 查看脚本停在哪里,的确,经查找,提示停在_IEAction($oSubmit, "click")。
怎样才能获得提示窗口的控制权呢?请指教! 这是进程阻塞,网页弹出窗口后,进程就暂停了的,所以后面的语句均不会执行,因此需要另开一个进程来等待判断 回复 1# 老不懂
多进程 搜索就有了 谢谢chamlien和lin6051的指教!我在_IEAction($oSubmit, "click")前加了句Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''提示信息'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1'') "')仍然不行,但另一个相同的弹出提示窗口,Title=Windows Internet Explorer,我用上面的语句Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''Windows Internet Explorer'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1'') "')是行的。换成Send语句也正确,Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''Windows Internet Explorer'',$a=WinWait($s), $a=WinActivate($s), $a=Send(''{Enter}'') "')。但是,用到汉字提示窗口'提示信息'时就不管用了,ControlClick,Send都不行。另外,用$a=Send(''{Enter}'')时,英文提示'Windows Internet Explorer'格式是对的,但用到汉字提示窗口'提示信息'时,脚本的格式自动错位成$a=Send(''{Enter}''),看上去多了两个空格,删也删不掉。全句是这样Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''提示信息'',$a=WinWait($s), $a=WinActivate($s), $a=Send(''{Enter}'') "')。请指教问题出在哪里? 之前遇到过这个情况,不能对窗口发送,只能SENDSLEEP等待操作了。 窗口直接close掉吧,不要点击什么东西。 回复 6# 1361739590
直接close不能解决问题,弹出窗口要做判断的,不是确定,就不保存内容了,而我要保存。 用这个$a=Send(''{Enter}'')应该可以的。 最终我把CML命令另写一段脚本并编译,再在脚本中调用编译的exe,成功关闭弹出窗口,后续的脚本运行也是正确的。只是一段脚本非要变成二段,感觉不舒服,有高手指点最好!
页:
[1]