老不懂 发表于 2016-8-29 11:36:08

[已解决]用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")。
怎样才能获得提示窗口的控制权呢?请指教!

chamlien 发表于 2016-8-29 16:29:54

这是进程阻塞,网页弹出窗口后,进程就暂停了的,所以后面的语句均不会执行,因此需要另开一个进程来等待判断

lin6051 发表于 2016-8-31 14:34:12

回复 1# 老不懂


    多进程 搜索就有了

老不懂 发表于 2016-9-1 09:28:54

谢谢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}'') "')。请指教问题出在哪里?

heroxianf 发表于 2016-9-1 10:01:09

之前遇到过这个情况,不能对窗口发送,只能SENDSLEEP等待操作了。

1361739590 发表于 2016-9-1 16:12:45

窗口直接close掉吧,不要点击什么东西。

老不懂 发表于 2016-9-5 16:11:10

回复 6# 1361739590

直接close不能解决问题,弹出窗口要做判断的,不是确定,就不保存内容了,而我要保存。

1361739590 发表于 2016-9-5 16:28:26

用这个$a=Send(''{Enter}'')应该可以的。

老不懂 发表于 2016-9-12 17:31:36

最终我把CML命令另写一段脚本并编译,再在脚本中调用编译的exe,成功关闭弹出窗口,后续的脚本运行也是正确的。只是一段脚本非要变成二段,感觉不舒服,有高手指点最好!
页: [1]
查看完整版本: [已解决]用autoit编写的脚本停止在源程序提示窗口,不往下执行,请指教!