找回密码
 加入
搜索
查看: 10837|回复: 22

[效率算法] while和Func如何共存?

 火.. [复制链接]
发表于 2012-9-1 18:22:52 | 显示全部楼层 |阅读模式
本帖最后由 zzmxd 于 2012-9-1 21:50 编辑

就像这样,几个如果调换顺序,总有一些代码失效,该如何让他们都能生效?
While 1
        Local $msg = TrayGetMsg()
        Local $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_MINIMIZE
                        GUISetState(@SW_HIDE)
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button2
                        Local $i = 0
            Do
              ProcessSetPriority ( "1.exe", 3 )
                          Sleep (1000)
              $i = $i + 1
                        Until $i = 10
                                

        EndSwitch
        Select
                Case $msg = 0
                        ContinueLoop
                Case $msg = $prefsitem1
                        GUISetState(@SW_SHOWNORMAL)
                        Case $msg = $prefsitem2
                        GUISetState(@SW_HIDE)
                Case $msg = $aboutitem
                        MsgBox(64, "关于:", "http://www.autoitx.com/")
                Case $msg = $exititem
                        ExitLoop
        EndSelect
        
WEnd

TraySetState()
Example()

Func Example()

    TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "TrayEvent")
    TraySetState(1) ; Show the tray menu.

    While 1
        Sleep(100)  ; 空闲循环
    WEnd
EndFunc   ;==>Example

Func TrayEvent()
    Switch @TRAY_ID ; Check the last tray item identifier.
        Case $TRAY_EVENT_PRIMARYDOUBLE
            ; Display a message box about the AutoIt version and installation path of the AutoIt executable.
            MsgBox(4096, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                    "Version: " & @AutoItVersion & @CRLF & _
                    "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "", 0, -1) - 1)) ; Find the folder of a full path.

    EndSwitch
EndFunc   ;==>TrayEvent


Func ExitScript()
    Exit
EndFunc   
不是while语句无法运行,就是func语句无法运行。
 楼主| 发表于 2012-9-1 18:31:35 | 显示全部楼层
帮助文件里的例子似乎没有类似的,只有分开来的。。。
发表于 2012-9-1 18:54:00 | 显示全部楼层
楼主会说正经的中国话吗?完全没明白说的是什么意思
 楼主| 发表于 2012-9-1 19:00:43 | 显示全部楼层
回复 3# netegg
就是说如果用这个代码运行的话,会有一些无法执行,将失效,如同没有这段代码一般,估计有冲突
发表于 2012-9-1 19:18:52 | 显示全部楼层
那要看哪几个调换顺序,如果你把While 1放到WEND后那自然会出错
发表于 2012-9-1 19:31:30 | 显示全部楼层
本帖最后由 netegg 于 2012-9-1 19:34 编辑

合到一个条件里
select
case $nMsg = or $msg =
case
endselect
试试看

还有把标题改下,你的问题和while/func有什么关系
发表于 2012-9-1 19:32:36 | 显示全部楼层
本帖最后由 seniors 于 2012-9-1 19:33 编辑

不好意思看错
发全代码吧
 楼主| 发表于 2012-9-1 20:00:55 | 显示全部楼层
回复 6# netegg
标题没错,因为不是while语句无法运行,就是func语句无法运行。
发表于 2012-9-1 21:22:18 | 显示全部楼层
本帖最后由 netegg 于 2012-9-1 21:28 编辑

回复 8# zzmxd
func是定义,和运行有什么关系,只有逻辑和运行有关
另外你上来的那段代码里什么地方有func

另外搜了搜楼主的帖子,建议楼主先把基本知识再看看吧,这样问的话,说不明白的

评分

参与人数 3金钱 +50 收起 理由
tryhi + 20 +1
zzmxd + 20
user3000 + 10 赞同

查看全部评分

 楼主| 发表于 2012-9-1 21:53:42 | 显示全部楼层
回复 9# netegg
不好意思,代码少复制了一段,现在补充完整。另外哪里有基本资料?我看过Autoit的自带帮助文件,里面描述Func语句的例子里没有插入While,While语句里也没有Func,所以我不知道他们该怎么排列。
发表于 2012-9-1 22:08:48 | 显示全部楼层
你这个while里调用哪个func了?
除了这个选项
                Case $msg = $exititem
                        ExitLoop
退出循环后才能执行后面的func,没仔细试,不过大概应该是这个逻辑
发表于 2012-9-1 22:10:27 | 显示全部楼层
回复 10# zzmxd
while和func没什么关系,只要while...wend和func...endfunc别穿插就行
 楼主| 发表于 2012-9-1 22:19:13 | 显示全部楼层
回复 12# netegg

好的,我试试
发表于 2012-9-1 23:38:14 | 显示全部楼层
小弟实在没看懂   楼主的意思
while 是循环 有循环套循环的  也有  函数在循环里面的
func 是自定义函数  里面可以有循环 也可以有函数
两个怎么会  搞到一起呢???
发表于 2012-9-2 01:14:53 | 显示全部楼层
看不明白楼主的意思,估计是无法同时响应GUI和托盘的动作命令吧~~
混乱中
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-3 17:19 , Processed in 0.084691 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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