xing999999 发表于 2015-12-17 11:25:21

[已解决]脚本为什么没有结束?所有步骤都完成了但是tooltip却一直存在

本帖最后由 xing999999 于 2015-12-18 11:36 编辑

_main()

Exit
Func _main()
        Local $liulanqi = "2345王牌浏览器 v6.3"
        Local $tip
        Sleep(200)
        Run("2345explorer.exe")
        $tip = "为了保证自动安装的顺利完成,请不要乱动的键盘和鼠标。"
        $tip &= @CRLF
        $tip &= "2345浏览器默认安装在C盘。如果需要安装在其他盘,请使用手动安装。"
        $tip &= @CRLF
        $tip &= "如果需要安装在其他盘,请在安装结束后,卸载,再手动安装。"
        ToolTip($tip, @DesktopWidth / 2.5 - 15, @DesktopHeight - 40 - 60, "温馨提示:", 2)
        Sleep(200)
        WinWaitActive($liulanqi)
        Sleep(200)
        Send("{ENTER}")
        Sleep(200)
        $liulanqi = "2345网址导航-开创中国百年品牌(已创建10年零3个月) - 2345王牌浏览器 6.3"
        WinWaitActive($liulanqi)
        Sleep(1000)
        Send("!{F4}")
        Sleep(200)
        $liulanqi = "2345王牌浏览器"
        WinWaitActive($liulanqi)
        Sleep(200)
        Send("{ENTER}")
EndFunc   ;==>_main测试运行,安装过程中一切顺利,但是所有步骤都完成后,tooltip还是存在,并且我看右下的脚本也存在。
后来我加了Opt('TrayIconDebug', 1)调试,发现脚本一直停在WinWaitActive($liulanqi)这一句,为什么呢?不是等并激活窗口后发送enter然后就结束了吗?

xing999999 发表于 2015-12-17 11:40:45

我把代码改成Opt('TrayIconDebug', 1)

Local $liulanqi = "2345王牌浏览器 v6.3"
Local $tip
Sleep(200)
Run("2345explorer.exe")
$tip = "为了保证自动安装的顺利完成,请不要乱动的键盘和鼠标。"
$tip &= @CRLF
$tip &= "2345浏览器默认安装在C盘。如果需要安装在其他盘,请使用手动安装。"
$tip &= @CRLF
$tip &= "如果需要安装在其他盘,请在安装结束后,卸载,再手动安装。"
ToolTip($tip, @DesktopWidth / 2.5 - 15, @DesktopHeight - 40 - 60, "温馨提示:", 2)
Sleep(200)
WinWaitActive($liulanqi)
Sleep(200)
Send("{ENTER}")
Sleep(200)
$liulanqi = "2345网址导航-开创中国百年品牌(已创建10年零3个月) - 2345王牌浏览器 6.3"
WinWaitActive($liulanqi)
ProcessClose("2345Explorer.exe")
Exit改成这样就好了,直接结束进程。。但我还是不明白为什么上面的不行。

ceoguang 发表于 2015-12-17 11:52:47

如果可以的话,将WinWaitxxx换成Findwindow,将Send换成sendmessage

xing999999 发表于 2015-12-17 12:27:30

Findwindow?我刚去索引里查了,没这个啊,连find都没。。。

afan 发表于 2015-12-17 12:52:49

你用了两处 Send("{ENTER}"),而且你也肯定所有的步骤已完成,由此推测,脚本并没有执行完,只是完成了上面那个 Send("{ENTER}")

由此继续推测 WinWaitActive($liulanqi) 等待的的其实是 "2345网址导航-开创中国百年品牌(已创建10年零3个月) - 2345王牌浏览器 6.3" 你既然加了OPT调试,应该注意其行号。

真如此的话,继续推测。等待的窗口要么匹配错误,要么就是也可能不出现的窗口。如果属于前者,修改匹配标题;如果是后者,用我以前告诉你的方法,用 REGEXPTITLE 匹配可能出现的窗口,进而用 StringInstr 确定。

另外,跟你说过,少 Sleep,结果你到处都是 Sleep,而且,将 Sleep 用在 WinWaitActive 下面绝对是画蛇添足的错误,必须删除,否则隐患、不稳定。

再另外,WinWaitActive 肯定不如 WinWait 再 WinActivate 的方式,前者或会被用户的其它操作而暂停

luren666 发表于 2015-12-17 21:05:33

脚本结束之前自己使用tooltip("") 关闭之前的提示信息。

xing999999 发表于 2015-12-17 22:53:11

回复 5# afan


一段话让我明白了很多。谢谢。。。
我之前也是完全不明白winwaitactive和 winwait+winactivate的区别,我还以为前者是后两者的升级版。。
老师既然说少SLEEP,我自然遵守,这个是我最开始学脚本自动化的时候做的,今天回过头来继续做,运行了下结果发现没完成,看了下代码又没发现什么,才来问的。如果是现在写必然是会尽少用SLEEP。

ura 发表于 2015-12-18 08:54:41

如果确定执行完毕,结尾tooltip("")
如阿凡所说,少用sleep

车技一流 发表于 2015-12-18 15:32:16

新手学习了感谢分享
页: [1]
查看完整版本: [已解决]脚本为什么没有结束?所有步骤都完成了但是tooltip却一直存在