找回密码
 加入
搜索
查看: 5378|回复: 13

[AU3基础] 我做了一个循环按键模拟安装程序的脚本,如何检测它长时间没有进行动作?

  [复制链接]
发表于 2010-8-2 15:40:29 | 显示全部楼层 |阅读模式
我做了一个循环按键模拟安装程序的脚本,如何检测它长时间没有进行动作?

好吧,我承认写的有点模糊,在这里我详细说明一下.我写了一个脚本,这个脚本叫好像是循环的安装文件一样,但是有时我会发现脚本会卡住.(比如一个窗口我没有判定对,一个窗口标题打错了).我希望如果我的脚本卡住了,或是长时间没有到一个环节.就可以检测出来,如果能检测出来我就可以从新启动程序或用其他方法来应对了.

如果有时间我在详细解释一下,我上面说的循环安装文件其实是一个能让人明白的假设.更详细的情况是有一个数据导出程序,你每次选一个日期按一个按钮就可以导出一些数据.但是我要用au3批量导出所有数据.有时导出数据时会报错,而且千奇百怪.所以我会提出这个问题.如果这个日期会报错.那我就等1小时(最多会一个小时)如果一个小时还没有完成或是还没有到另一阶段就采取行动,但是如何监控这1小时呢?

请各位指教
发表于 2010-8-2 15:43:42 | 显示全部楼层
你可以这样
程序每执行一步,或者每到一个可能会出错的步骤前后,都手动添加一个TrayTip来显示当前的进度..
同理,也可以写一个txt文件做log
 楼主| 发表于 2010-8-2 16:05:45 | 显示全部楼层
你可以这样
程序每执行一步,或者每到一个可能会出错的步骤前后,都手动添加一个TrayTip来显示当前的进度..
...
Ziya 发表于 2010-8-2 15:43


你说的我都做了,但是那和检测到程序是否停止有什么关系?
TrayTip 是给人看的.
写入ini我也做了,那也是给人看的.
发表于 2010-8-2 16:14:44 | 显示全部楼层
数据导出会生成文件吧,至少会产生一个变量吧!
此时可以注册一个AdlibRegister函数,在定义的时间里判断文件(或变量)有没有变化,
如果长时间(或AdlibRegister函数规定的时间)没有变化,则可定义程序无动作。
发表于 2010-8-2 16:17:47 | 显示全部楼层
写log是为了查看到底卡在哪一步....
 楼主| 发表于 2010-8-4 10:01:45 | 显示全部楼层
本帖最后由 ac5474012 于 2010-8-4 10:39 编辑

回复 4# 3mile

数据导出会生成文件吧,至少会产生一个变量吧!
此时可以注册一个AdlibRegister函数,在定义的时间里判断文 ...
3mile 发表于 2010-8-2 16:14


我看了你推荐的 AdlibRegister函数 ,但是现在又一个问题,我如果用了 AdlibRegister函数 可以确定大循环卡住了,我可以将导致卡住的特殊ID加入黑名单.但是现在的问题是:我如何让程序重新开始? 我的程序是一个While循环中套了很多 Func 自定义函数的循环.而我想让程序一遇到问题,就从程序的某个特定行从新开始,或是在程序开头开始就像从新打开它一样.
发表于 2010-8-4 14:00:39 | 显示全部楼层
$i = 'x'
while 1
if $i = 'x' then x()
if $i ='x-1' then x-1()
........
if $i = 0 then exitloop/exit
$i -= 1
wend
放入AdlibRegister定义的函数里

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-4 14:13:42 | 显示全部楼层
每句if...then 下面加个sleep(自定)
发表于 2010-8-4 14:36:30 | 显示全部楼层
回复 6# ac5474012
写Debuger?能力有限,帮不了你了。
看下官网的这个能不能帮助你?
http://www.autoitscript.com/forum/index.php?showtopic=21834
 楼主| 发表于 2010-8-6 09:45:58 | 显示全部楼层
回复 7# wanhua8u8

放入AdlibRegister定义的函数里
wanhua8u8 发表于 2010-8-4 14:00


我要的是从新循环,你这样不就是直接退出了吗?
发表于 2010-8-6 14:58:14 | 显示全部楼层
AdlibRegister 
--------------------------------------------------------------------------------
注册一个 Adlib 函数.
AdlibRegister ( "函数" [, 时间] )

参数
函数 要注册的 Adlib 函数名称. 
时间 [可选参数] 多长时间调用一次函数(单位为毫秒). 默认(Default)为 250 毫秒. 
怎么会退出呢?
发表于 2010-8-6 14:59:26 | 显示全部楼层
本帖最后由 都市浪子666 于 2010-8-6 15:01 编辑
$sum=0
$sum_end=20
Do
        $sum = $sum + 1
        Sleep(500)
        If WinExists("","") Then
                ; 窗口存在,执行动作
                 $sum = $sum_end + 1
         EndIf
        
Until  $sum = $sum_end  Or $sum > $sum_end 

If $sum = $sum_end  Then
        MsgBox(0,0,"程序等待了"  & $sum_end/2 & "秒,窗口一直没出现,程序退出" )
        Exit
Else
        MsgBox(0,0,"某某窗口存在" )
EndIf
楼主用这个试试,,在等待10秒,窗口还没出现的话,就会信息提示
楼主自己改下就行了,
偶水平不高,大侠们莫笑哈。。。。。。。

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-8-15 20:26:47 | 显示全部楼层
回复 11# wanhua8u8
怎么会退出呢?
wanhua8u8 发表于 2010-8-6 14:58

道歉,最近没有回复主题。

这倒是,不过我不想在有大量的改动了。现在程序已经基本可靠了。不过还是多谢啦~~
 楼主| 发表于 2010-8-15 20:30:19 | 显示全部楼层
回复 12# 都市浪子666

楼主用这个试试,,在等待10秒,窗口还没出现的话,就会信息提示
楼主自己改下就行了,
偶水平不高,大侠 ...
都市浪子666 发表于 2010-8-6 14:59


道歉,很久没有看主题了。
你这方法很实用,我现在正在用这个方法呢。不过这个方法有个问题有的时候WinExists出现了还会死,而且每个判定都这样我也是很烦的。不过还是多谢,这是现在我认为解决这个问题最好的办法了~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 10:22 , Processed in 0.110610 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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