82035935 发表于 2011-8-27 08:57:54

如何实现多个循环?

本帖最后由 82035935 于 2011-8-27 09:00 编辑

Run("系统专家.exe")

While 1
If Not ProcessExists("系统专家.exe") Then Exit
Wend只执行一个循环完全没问题,执行完毕就会自动退出脚本。While 1
If Not ProcessExists("系统专家.exe") Then Exit
If WinWaitActive("","安装百度工具栏") Then ControlClick("","安装百度工具栏","TCheckBox1")
If WinWaitActive("","安装百度工具栏") Then ControlClick("","继续","TButton1")
ExitLoop
Wend但执行两个或多个循环就不能自动退出脚本了,我需要的是如何执行多个循环又能自动退出脚本呢?

boyhong 发表于 2011-8-27 09:35:56

你这个有一个BUG。。。若电话上有多个系统专家.exe这个名字的进程怎么办??那不就直接退了?

呵呵,,,你看一下RUN的返回值,可是PID啊。。。多爽!!

$tmppid1=Run("系统专家.exe")
If $tmppid1<>0 then
Do
        Sleep(50)
Until ProcessExists ($tmppid1)=0
Else
        MsgBox(16,"","执行系统专家.exe失败")
EndIf

boyhong 发表于 2011-8-27 09:38:56

第二段话我没有看懂。。。是指同时执行多个循环?。。。多线程或者采用多进程模仿多线程效果。。。你在论坛上搜搜。。。会有很多答案给你的。。。。

happytc 发表于 2011-8-27 09:43:37

你想同时执行多个循环,是这个意思吧,也许AdlibRegister()可以帮你!

Cygerist 发表于 2011-8-27 11:19:57

你的程序逻辑有问题。
在第一段代码中,Run("系统专家.exe")执行完毕会立即执行循环,此时"系统专家.exe"是没有完成启动的,因为程序启动需要一定的时间。
第二段代码中循环体比较多,在执行循环是"系统专家.exe"可能已经运行成功了,所以If Not ProcessExists("系统专家.exe") Then Exit这条语句不能退出循环,后面两条语句没有指定退出循环,所以构成了死循环,而且可能无限次打开"安装百度工具栏"造成死机,很危险!这种代码很不稳定,执行结果与系统运行速度有关,应避免。

dition 发表于 2011-8-27 13:05:48

加sleep测试下是不是窗口没完全打开

3mile 发表于 2011-8-27 15:22:44

WinWaitActive放到while里?
WinWaitActive
--------------------------------------------------------------------------------

暂停脚本执行,直到请求的窗口激活.
页: [1]
查看完整版本: 如何实现多个循环?