找回密码
 加入
搜索
查看: 10536|回复: 21

[系统综合] (已解决)如何解决等待时间设置的小问题

 火.. [复制链接]
发表于 2010-7-22 09:22:57 | 显示全部楼层 |阅读模式
本帖最后由 oksy 于 2010-7-27 07:53 编辑

本人系菜鸟,有待各位高手指教。
不好意思,标题不知道应该怎表达,不过,在主内容中我会说得详细些,希望不会被扣分,哈哈哈哈!~
先看段代码吧
Run("ACDSEE_9.0.exe")
WinWaitActive("安装 - ACDSee 9","欢迎使用 ACDSee 9 安装向导")
Send("!n")
WinWaitActive("安装 - ACDSee 9","请仔细阅读下列许可协议。")
Send("!n")
WinWaitActive("安装 - ACDSee 9","ACDSee 是目前最流行的数字图象处理软件")
Send("!n")
WinWaitActive("安装 - ACDSee 9","选择目标位置")
Send("!n")
WinWaitActive("安装 - ACDSee 9","选择开始菜单文件夹")
Send("!n")
WinWaitActive("安装 - ACDSee 9","选择附加任务")
Send("!n")
WinWaitActive("安装 - ACDSee 9","安装程序现在准备开始安装 ACDSee 9 到您的电脑中。")
Send("!i")
WinWaitActive("安装 - ACDSee 9","http://www.ylmf.com")
Send("!n")
WinWaitActive("安装 - ACDSee 9","ACDSee 9 安装向导完成")
Send("{Tab}")
Send(" ")
Send("!f")
WinWaitActive("编目文件向导","你能够通过编目你的图像和媒体文件提高 ACDSee 的性能。")
ControlClick ("编目文件向导","取消", "Button6")
Sleep(2000)
Do
    If WinExists("文件关联已经变更","ACDSee 9.0 已经不再与你先前选择的文件类型建立关联") Then
            WinActivate("文件关联已经变更","ACDSee 9.0 已经不再与你先前选择的文件类型建立关联")
            Send("!d")
            ControlClick ("文件关联已经变更","确定", "Button2")
    EndIf
Until WinExists("My Pictures - ACDSee 9 Photo Manager")
    WinActivate("My Pictures - ACDSee 9 Photo Manager")
    WinClose("My Pictures - ACDSee 9 Photo Manager")
这是我个人写的一个自动安装雨林木风版本的ACDSEE9.0程序,勉强可以运行使用,呵呵。
在程序安装完后,会执行安装好的程序,并有相映的窗口跳出,所以需要对跳出的窗口进行进一步的自动设置(设置好后,运行程序,将不再会跳出此窗口,在使用过程中)。
程序完成是在
WinWaitActive("安装 - ACDSee 9","ACDSee 9 安装向导完成")
Send("{Tab}")
Send(" ")
Send("!f")
结束后。
“编目文件向导”和“文件关联已经变更”窗口就是运行程序后,跳出的需要调试的窗口。但由于“文件关联已经变更”跳出比较迟,所以用到Sleep(2000)命令进行等待。
我现在的问题是这样的:
1、由于每台计算机的配置不可能相同,所以,“文件关联已经变更”窗口跳出的时间也肯定不见得就是我所设定的时间范围,如果超出了时间,没有跳出窗口,则直接运行了后续程序。自然在下次运行程序时,此窗口仍然会跳出,没有达到安装后直接使用的效果。
2、当然,把Sleep时间设长,可以满足要求。但如果时间设置过长,在安装的过程中感觉就不连贯,虽然可以达到目的,但浪费了时间。
所以,我想向高手了解,是否还有别的方式能解决此问题,使用别的命令,取消Sleep的等待时间;或换个思维方式编写程序来实现。这样写出来的程序,出现的不可预知性会减少到最低,又能完美的解决问题。
请高手赐教!~~~
当然,各位高手如果对我写的程序本身有什么好的建议,也请提出来,谢谢!~~~

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-7-22 09:38:58 | 显示全部楼层
很不错,虽然提问标题有些模糊,但是贴内将遇到的问题描述的十分清楚。

就冲这一点,相信会有高手来帮忙解决的。

顺便问下,这个窗口是每次安装都会跳出来的吗?
发表于 2010-7-22 09:42:43 | 显示全部楼层
那个安装程序没试过....
不能用WinWait之类的等那个么?
 楼主| 发表于 2010-7-22 11:40:48 | 显示全部楼层
回复 2# 水木子

那个窗口如果说是覆盖安装,原有的程序已经关闭过,那就不会跳出了,但如果是第一次装,肯定会跳出的。所以,我才添加了IF语句的。
水木老大,程序有什么写得不够好的地方,多指教呀。
 楼主| 发表于 2010-7-22 11:43:54 | 显示全部楼层
回复 3# Ziya


因为如果是覆盖安装,就不会跳出此窗口了,所以如果winwait,窗口不没出来,那就不能继续了呀。
发表于 2010-7-22 11:53:32 | 显示全部楼层
看代码中选择默认安装路径,所以首先判断安装目录是否已经存在。
若已经存在则执行32行,若不存在则winwait

评分

参与人数 1金钱 +10 收起 理由
oksy + 10

查看全部评分

发表于 2010-7-22 11:54:02 | 显示全部楼层
之前装过的话,注册表是会有相关条目的吧
是否能够先做一个判断呢?
如果注册表中有,则跳过
如果没有,则winwait这样

评分

参与人数 1金钱 +10 收起 理由
oksy + 10

查看全部评分

发表于 2010-7-22 12:00:12 | 显示全部楼层
回复 4# oksy

老大?实在不敢当啊!

楼上两位的思路不错,值得一试!

评分

参与人数 1金钱 +10 收起 理由
oksy + 10

查看全部评分

 楼主| 发表于 2010-7-22 13:34:17 | 显示全部楼层
回复 6# 3mile


   两个问题:1、如果前次安装的默认路径不同呢?进行全盘收缩查找?
            2、如果前次安装后没有对跳出的这个窗口进行设置,同样还是会跳出此窗口的呦。
 楼主| 发表于 2010-7-22 15:00:51 | 显示全部楼层
其实我的这个问题,主要是问有没别的方法代替Sleep这个等待的不可知时间,如果没有,似乎也只好改变写程序的思路了。但我上面提出的问题,确实,还是存在这样的可能。至少为了让程序更优化,或者说更少的出现意外状况而出错。个人认为还是应该尽多的考虑多方面因素。
如同3mile 和Ziya的回复,确实可以换个思路来写,主要目的是判断是否已经安装,安装了就不再运行。但我的考虑是,如果确实安装。但为了确认打开后能够直接使用,我也会考虑打开已经安装好的程序,再尝试这两个窗口是否已经点击确认,下次不再跳出。如果这样去考虑程序本身,似乎还是需要用到判断语句,自然也就需要SLEEP的等待时间了。
只是想让自己的程序更易用,如有什么没有表达好的,或理解上的误区,也请高手指正。
发表于 2010-7-22 15:08:03 | 显示全部楼层
安装后运行程序,会有多种可能出现的窗口,(用正则匹配)根据出现的窗体判断继续执行的动作。
 楼主| 发表于 2010-7-22 15:08:14 | 显示全部楼层
本帖最后由 oksy 于 2010-7-22 15:09 编辑

为了方便探讨,我找了个新的安装程序,安装过程简化了,但同样还是有我提出的问题。发个网址供大家下载安装程序  http://www.xiazaiba.com/html/132.html
同时附上自己修改后的,此安装程序的源码,用于探讨
Run("ACDSee_9.0.108_HA_XiaZaiBa.exe")
WinWaitActive("下载吧 - ACDSee 9.0.108 安装","请选择安装方式")
Send("!i")
WinWaitActive("下载吧 - ACDSee 9.0.108 安装 ","单击 [完成(F)] 关闭此向导")
Send("!s")
Send("!f")
WinWaitActive("编目文件向导","你能够通过编目你的图像和媒体文件提高 ACDSee 的性能。")
ControlClick ("编目文件向导","取消", "Button6")
Sleep(2000)
Do
    If WinExists("文件关联已经变更","ACDSee 9.0 已经不再与你先前选择的文件类型建立关联") Then
            WinActivate("文件关联已经变更","ACDSee 9.0 已经不再与你先前选择的文件类型建立关联")
            Send("!d")
            ControlClick ("文件关联已经变更","确定", "Button2")
    EndIf
Until WinExists("My Pictures - ACDSee 9 Photo Manager")
    WinActivate("My Pictures - ACDSee 9 Photo Manager")
    WinClose("My Pictures - ACDSee 9 Photo Manager")
同时,我也在查找判断路径的方式,请高手多指教!~
 楼主| 发表于 2010-7-22 15:19:28 | 显示全部楼层
回复 11# afan

老大所说(正则匹配)是否是需要引入变量来进行判断了,现在只是基础,变量有点晕,呵呵。不过我会去搜索下用法。我想问的是:如此是否就可以解决SLEEP时间等待的问题了?因为是用winexists来进行判断,所以需要等待窗口出现的时间。用正则匹配是否就没了等待窗口出现的时间问题?
发表于 2010-7-22 18:48:15 | 显示全部楼层
比如可能会有标题为a或者b两个可能的窗口
$h = WinWaitActive("[REGEXPTITLE:(a)|(b)]")
这样随便出哪个窗口都会立即返回窗口句柄
$tw = WinGetTitle($h)
Switch $tw
        Case a
                标题为a时的操作
        Case b
                标题为b时的操作
EndSwitch

评分

参与人数 2金钱 +20 贡献 +1 收起 理由
oksy + 20
lynfr8 + 1 很棒的见解

查看全部评分

 楼主| 发表于 2010-7-23 08:48:16 | 显示全部楼层
本帖最后由 oksy 于 2010-7-23 08:54 编辑

回复 14# afan


此种方式,是否就是判断A或B的存在?如果A和B同时存在是不是只执行A或B?还是都执行?(因为A、B、A+B、无 四种方式都有可能出现,用switch case是不是只执行其中一条?)小弟愚钝,请指教。
程序修改后,无法关闭跳出的窗口,不错停止了。估计写错了,汗。指点一下,谢谢。
Dim $h,$tw
Run("ACDSee_9.0.108_HA_XiaZaiBa.exe")
WinWaitActive("下载吧 - ACDSee 9.0.108 安装","请选择安装方式")
Send("!i")
WinWaitActive("下载吧 - ACDSee 9.0.108 安装 ","单击 [完成(F)] 关闭此向导")
Send("!s")
Send("!f")
$h=WinWaitActive("[REGEXPTITLE:(文件关联已经变更)|(编目文件向导)") 
$tw=WinGetTitle($h)
Switch $tw
        Case "文件关联已经变更" 
                         WinActivate("文件关联已经变更","ACDSee 9.0 已经不再与你先前选择的文件类型建立关联")
                         Send("!d")
        ControlClick ("文件关联已经变更","确定", "Button2")
        Case "编目文件向导"
                 WinActivate("编目文件向导","你能够通过编目你的图像和媒体文件提高 ACDSee 的性能。")
                 ControlClick ("编目文件向导","取消", "Button6")
EndSwitch
WinActivate("My Pictures - ACDSee 9 Photo Manager")
WinClose("My Pictures - ACDSee 9 Photo Manager")
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-3 02:17 , Processed in 0.094298 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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