找回密码
 加入
搜索
查看: 7255|回复: 16

[AU3基础] 在AdlibEnable中,可否结束某自定义函数的执行?

 火.. [复制链接]
发表于 2011-6-27 00:09:04 | 显示全部楼层 |阅读模式
在AdlibEnable中,可否结束某自定义函数的执行?
发表于 2011-6-27 02:32:43 | 显示全部楼层
那要看你怎么写的自定义函数了
另外,adlibenable已经被adlibregister代替了
 楼主| 发表于 2011-6-27 18:39:01 | 显示全部楼层
那要如何写 自定义函数 才能在adlibregister中结束“它” 并重新执行呢?
发表于 2011-6-27 18:40:11 | 显示全部楼层
回复 3# 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
;需要的结果就是 处理掉意外并 让脚本按原来的流程继续执行
发表于 2011-6-27 23:44:57 | 显示全部楼层
lz,麻烦你写段完整的程序,这样写的话,没法给你提出建议
 楼主| 发表于 2011-6-28 00:08:33 | 显示全部楼层
本帖最后由 sharenpk 于 2011-6-28 00:09 编辑
lz,麻烦你写段完整的程序,这样写的话,没法给你提出建议
netegg 发表于 2011-6-27 23:44



    。。。。。。。。。。无语中

你可以把上面看成完整的程序 比如说执行到aaa() 里面的“4” 这条命令 出现 意外,我需要的结果是处理掉意外(你硬要具体的程序的话)你可以认为这个意外是个 对话框,在我关闭这个对话框之后我要返回到“4” 这条命令并继续运行下去

这跟我上面说的并无两样
发表于 2011-6-28 01:42:52 | 显示全部楼层
本帖最后由 netegg 于 2011-6-28 03:44 编辑

回复 7# sharenpk
知道大概意思了,容错,是吧
还真没写过,试试看吧
另外一点,如果是对话框的话,相当简单,因为对话框会中断程序,很容易返回到原程序中
发表于 2011-6-28 15:57:32 | 显示全部楼层
不理解楼主的意思
 楼主| 发表于 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
发表于 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')
                until  WinWait("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时结束返回
发表于 2011-6-29 09:58:00 | 显示全部楼层
回复 5# sharenpk


    大多情况下不管用的,若aaa()时出现意外,还是会整个脚本退出的
 楼主| 发表于 2011-6-29 21:51:19 | 显示全部楼层
netegg 我就知道你理解错了,我一再强调,而且写了个 "Button99999999"
意思就是说脚本有可能是无限多行代码,但是在执行的时候 并不确定 会什么时候出现异常,所以说不能针对某一行或几行代码来写个子函数,也不能在每行代码下写判断函数(如果这样写的话那就要写到天荒地老了)
发表于 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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-14 14:18 , Processed in 0.125560 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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