找回密码
 加入
搜索
查看: 2196|回复: 7

关于弹出新窗口后命令失效的问题

[复制链接]
发表于 2009-6-17 14:15:40 | 显示全部楼层 |阅读模式
本人初学AutoIt,在编写了一些脚本后发现一个问题,就是当程序自动运行到需要弹出新窗口这个步骤时,窗口弹出后,就不继续自动执行了,这个问题发现不止一次了,请各位给指点一下,谢谢!代码如下 :
AdlibEnable("myadlib")
RunWait(@ComSpec & " /c .\JrscCtrl.msi ","",@SW_HIDE)
Func myadlib()
    If WinActive("JrscCtrl","选择是否要修复或移除 JrscCtrl。") Then
           WinClose("JrscCtrl","选择是否要修复或移除 JrscCtrl。")
           MsgBox(0,"","您已经安装了该插件")
        Exit ;如果出现已经安装的提示窗口,就推出安装
        ElseIf WinActive("JrscCtrl","下一步") Then
                 WinWaitActive("JrscCtrl","下一步")
  send("!N")
  WinWaitActive("JrscCtrl","下一步")
  send("!N")
  WinWaitActive("JrscCtrl","下一步")
  send("!N")
  While WinWaitActive ("JrscCtrl","退出安装")
        send("!O")
  WEnd
  WinWaitActive("Autodesk DWF Viewer 5.0","下一步")
  send("!N")
…………
…………
当程序运行完“WEnd”后,会弹出下图所示新窗口,此时就停住了,不再往下进行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-6-17 14:38:13 | 显示全部楼层
http://www.autoitx.com/forum.php ... omuid=1003#pid55745
WinActivate     :激活指定的窗口(设置焦点到该窗口,使其成为活动窗口)
 楼主| 发表于 2009-6-17 15:27:00 | 显示全部楼层
谢谢lynfr8,不好意思,我刚刚发现问题的原因不是因为新弹出的窗口未激活,该窗口是激活的,而是
  While WinWaitActive ("JrscCtrl","退出安装")
        send("!O")
  WEnd
这个循环语句有问题,当不再出现("JrscCtrl","退出安装")界面后,进入到弹出界面状态,实际上程序里还在执行send("!O"),这我就不太明白了,不是当while后面为假时循环就结束了么?我现在弹出新窗口就应该为假了,为什么还要执行send("!O")呢?
发表于 2009-6-17 21:40:29 | 显示全部楼层
 While WinWaitActive ("JrscCtrl","退出安装")
        send("!O")
  WEnd
加加上调试信息Opt("TrayIconDebug", 1)语句就明白你那个循环是停在WEnd那里,因为表达式的值为真则重复执行循环体语句(以WEnd为结束标志),否则循环结束
按照你的设计本来就应该结束循环进入下一句,可是再认真看下 WinWaitActive 的定义:暂停脚本的执行直至指定窗口被激活(成为可活动状态)为止
就这样脚本就停了,在苦苦等待那个他要的("JrscCtrl","退出安装")窗口归来
可是,伊人早已随人私奔一去不回头了
留下痴心郎独等....
把while语句删除吧,这里根本没必要用循环语句检测
直接步进就行了
WinWaitActive ("JrscCtrl","退出安装")
        send("!O")
WinWaitActive("Autodesk DWF Viewer 5.0","下一步")
  send("!N")
发表于 2009-6-17 21:45:02 | 显示全部楼层
太帅了我很喜欢楼上的分析
 楼主| 发表于 2009-6-18 14:17:40 | 显示全部楼层
非常感谢lynfr8 的细致回答,长了不少知识,先表示感谢!
因为我没说清楚,所以在这里再解释一下,就是我之所以加循环是因为("JrscCtrl","退出安装")界面会出来数次,但是因为机器不同出现的次数不一样,因此加上这个循环语句,如果去掉循环的话,第一次出现("JrscCtrl","退出安装")界面能过去,等第二次出现就卡死了。请lynfr8再帮忙分析一下吧,谢谢!
 楼主| 发表于 2009-6-19 08:27:39 | 显示全部楼层
又分析了一下,循环那段代码的确不对,因为并不是所有机器都会弹出("JrscCtrl","退出安装")窗口,即使弹出的话次数也不确定,请高手们帮着分析分析像这种情况该如何写?
发表于 2009-6-19 14:04:25 | 显示全部楼层
你自己代码都会用AdlibEnable("myadlib")啦
这里也可以这样写
Func myadlib()
    If WinWaitActive ("JrscCtrl","退出安装") Then
        send("!O")
    EndIf
EndFunc

在开始加入
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 14:05 , Processed in 0.079561 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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