sharenpk 发表于 2011-6-27 00:09:04

在AdlibEnable中,可否结束某自定义函数的执行?

在AdlibEnable中,可否结束某自定义函数的执行?

netegg 发表于 2011-6-27 02:32:43

那要看你怎么写的自定义函数了
另外,adlibenable已经被adlibregister代替了

sharenpk 发表于 2011-6-27 18:39:01

那要如何写 自定义函数 才能在adlibregister中结束“它” 并重新执行呢?

3mile 发表于 2011-6-27 18:40:11

回复 3# sharenpk
先上你写的代码.大家帮你看看

sharenpk 发表于 2011-6-27 23:12:55

本帖最后由 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
;需要的结果就是 处理掉意外并 让脚本按原来的流程继续执行

netegg 发表于 2011-6-27 23:44:57

lz,麻烦你写段完整的程序,这样写的话,没法给你提出建议

sharenpk 发表于 2011-6-28 00:08:33

本帖最后由 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 01:42:52

本帖最后由 netegg 于 2011-6-28 03:44 编辑

回复 7# sharenpk
知道大概意思了,容错,是吧
还真没写过,试试看吧
另外一点,如果是对话框的话,相当简单,因为对话框会中断程序,很容易返回到原程序中

hzxymkb 发表于 2011-6-28 15:57:32

不理解楼主的意思

sharenpk 发表于 2011-6-28 23:15:08

本帖最后由 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-28 23:54:08

本帖最后由 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的操作,应该是个子函数

曼菲士 发表于 2011-6-29 09:49:45

你用一个全局变量,你要结束时,你就把变量置1,MyAdlib里加个判断,当变量为1时结束返回

happytc 发表于 2011-6-29 09:58:00

回复 5# sharenpk


    大多情况下不管用的,若aaa()时出现意外,还是会整个脚本退出的

sharenpk 发表于 2011-6-29 21:51:19

netegg 我就知道你理解错了,我一再强调,而且写了个 "Button99999999"
意思就是说脚本有可能是无限多行代码,但是在执行的时候 并不确定 会什么时候出现异常,所以说不能针对某一行或几行代码来写个子函数,也不能在每行代码下写判断函数(如果这样写的话那就要写到天荒地老了)

yhxhappy 发表于 2011-6-30 20:55:31

想到这么一个思路,但没验证过。如果按钮名称是规则的数字添加,那更方便;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
查看完整版本: 在AdlibEnable中,可否结束某自定义函数的执行?