在AdlibEnable中,可否结束某自定义函数的执行?
在AdlibEnable中,可否结束某自定义函数的执行? 那要看你怎么写的自定义函数了另外,adlibenable已经被adlibregister代替了 那要如何写 自定义函数 才能在adlibregister中结束“它” 并重新执行呢? 回复 3# sharenpk
先上你写的代码.大家帮你看看 本帖最后由 sharenpk 于 2011-6-27 23:16 编辑
不存在具体 代码,只是要个思路
比如说
;start
AdlibRegister("MyAdlib")
aaa()
Func aaa()
While 1
1
2
3
4
5
6
7
8
9
WEnd
EndFunc
Func MyAdlib()
If 执行aaa()时出现意外因素 Then
;如果现在什么也不做,现在是返回到哪条命令还是脚本会结束?
;可否返回 aaa()出现意外因素前的 未被响应的那条命令?
;不行的话 可否结束aaa()?再执行一次aaa()
EndIf
EndFunc
;需要的结果就是 处理掉意外并 让脚本按原来的流程继续执行 lz,麻烦你写段完整的程序,这样写的话,没法给你提出建议 本帖最后由 sharenpk 于 2011-6-28 00:09 编辑
lz,麻烦你写段完整的程序,这样写的话,没法给你提出建议
netegg 发表于 2011-6-27 23:44 http://www.autoitx.com/images/common/back.gif
。。。。。。。。。。无语中
你可以把上面看成完整的程序 比如说执行到aaa() 里面的“4” 这条命令 出现 意外,我需要的结果是处理掉意外(你硬要具体的程序的话)你可以认为这个意外是个 对话框,在我关闭这个对话框之后我要返回到“4” 这条命令并继续运行下去
这跟我上面说的并无两样 本帖最后由 netegg 于 2011-6-28 03:44 编辑
回复 7# sharenpk
知道大概意思了,容错,是吧
还真没写过,试试看吧
另外一点,如果是对话框的话,相当简单,因为对话框会中断程序,很容易返回到原程序中 不理解楼主的意思 本帖最后由 sharenpk 于 2011-6-28 23:32 编辑
;start
AdlibRegister("MyAdlib")
aaa()
Func aaa()
While 1
ControlClick("haha", "", "Button1")
WinWait("001")
ControlClick("haha", "", "Button2")
;如果说 在aaa()执行到ControlClick("haha", "", "Button2")
;现在应该是等待的是WinWait("002"),结果 被点击的程序 出现问题 弹出个 "bbbb" 窗口
WinWait("002")
ControlClick("haha", "", "Button3")
WinWait("003")
ControlClick("haha", "", "Button4")
WinWait("004")
ControlClick("haha", "", "Button5")
WinWait("005")
.
.
.
.
.
ControlClick("haha", "", "Button99999999")
WinWait("0099999999")
WEnd
EndFunc
Func MyAdlib()
If WinExists("bbbb") Then
ControlClick("bbbb", "", "关闭")
;想要的结果为 重新执行 ControlClick("haha", "", "Button2") 并继续执行后面的代码
;如果说 是在执行 ControlClick("haha", "", "Button3") 后 弹出的 "bbbb" 窗口 ,这里就该重新执行 ControlClick("haha", "", "Button3")并继续执行后面的代码
;如果说 是在执行 ControlClick("haha", "", "Button4") 后 弹出的 "bbbb" 窗口 ,这里就该重新执行 ControlClick("haha", "", "Button4")并继续执行后面的代码
;如果说 是在执行 ControlClick("haha", "", "Button5") 后 弹出的 "bbbb" 窗口 ,这里就该重新执行 ControlClick("haha", "", "Button5")并继续执行后面的代码
;.
;.
;.
;如果说 是在执行 ControlClick("haha", "", "Button99999999") 后 弹出的 "bbbb" 窗口 ,这里就该重新执行 ControlClick("haha", "", "Button99999999")并继续执行后面的代码
;也就是说 要 处理掉异常 并返回 未响应命令
EndIf
EndFunc 本帖最后由 netegg 于 2011-6-29 00:09 编辑
aaa()
Func aaa()
While 1
ControlClick("haha", "", "Button1")
WinWait("001")
ControlClick("haha", "", "Button2")
;如果说 在aaa()执行到ControlClick("haha", "", "Button2")
;现在应该是等待的是WinWait("002"),结果 被点击的程序 出现问题 弹出个 "bbbb" 窗口
do
if WinExists ('bbbb') then winkill('bbbb')
untilWinWait("002") <> 0
;while WinWait("002") = 0
;if WinExists ('bbbb') then winkill('bbbb')
; wend
;这两种不知道哪个好些,好像应该是上面那个,while好像无法嵌套
ControlClick("haha", "", "Button3")
WinWait("003")
ControlClick("haha", "", "Button4")
WinWait("004")
ControlClick("haha", "", "Button5")
WinWait("005")
.
.
.
.
.
ControlClick("haha", "", "Button99999999")
WinWait("0099999999")
WEnd
EndFunc这样不行吗,另外用adlib控制外部程序有时候不稳定
好像还是有些问题,你这个应该不是adlib的操作,应该是个子函数 你用一个全局变量,你要结束时,你就把变量置1,MyAdlib里加个判断,当变量为1时结束返回 回复 5# sharenpk
大多情况下不管用的,若aaa()时出现意外,还是会整个脚本退出的 netegg 我就知道你理解错了,我一再强调,而且写了个 "Button99999999"
意思就是说脚本有可能是无限多行代码,但是在执行的时候 并不确定 会什么时候出现异常,所以说不能针对某一行或几行代码来写个子函数,也不能在每行代码下写判断函数(如果这样写的话那就要写到天荒地老了) 想到这么一个思路,但没验证过。如果按钮名称是规则的数字添加,那更方便;start
Global $Button
Global $OldButton
AdlibRegister("MyAdlib")
aaa()
Func aaa()
While 1
$Button = "Button1"
WinWait("001")
$Button = "Button2"
WinWait("002")
;
;
WinWait("0099999999")
WEnd
EndFunc
Func MyAdlib()
If WinExists("bbbb") Then
ControlClick("bbbb", "", "关闭")
ControlClick("haha", "", $OldButton)
ElseIf $Button <> $OldButton Then
ControlClick("haha", "", $Button)
$OldButton = $Button
EndIf
EndFunc
页:
[1]
2