找回密码
 加入
搜索
查看: 2823|回复: 13

[AU3基础] 如何实现两个While循环同时执行 - 已解决

  [复制链接]
发表于 2017-6-30 14:09:02 | 显示全部楼层 |阅读模式
本帖最后由 JianWudao 于 2017-6-30 17:20 编辑

想同时执行两个While循环,同时监听两种类别事件。
托盘事件TrayGetMsg ( )需要一个While去一直监听,然后GUI主界面上也有按钮需要While一直去监听。
但是只能使用一个While,无法两个同时执行。
求帮助,谢谢!
发表于 2017-6-30 15:03:21 | 显示全部楼层
回复 1# JianWudao

While  只能有一個

監聽 事件  不一定要用WHILE 去做

你的思考 邏輯有問題

請說明 你要做的事情是甚麼....
 楼主| 发表于 2017-6-30 15:42:19 | 显示全部楼层
回复 2# kk_lee69


    嗯~我知道While只能有一个。
我在GUI上面用了一个While,来监听按钮事件。
然后又想做个托盘菜单出来,但是托盘菜单通常也是用的While循环,来监听TrayGetMsg()事件。
如果GUI进入了循环,就无法启动托盘的监听;如果进入托盘的循环,就无法监听GUI。
想知道怎么同时监听两种事件。谢谢!

这是GUI界面上的按钮监听
While 1
        $Msg = GUIGetMsg()
        Switch $Msg
                Case $Abutton
                        StartA()
                Case $Bbutton
                        StartB()
                Case $GUI_EVENT_CLOSE
                        _AD_Close()
                        Exit
        EndSwitch
WEnd
这是托盘菜单的事件监听
While 1
        Switch TrayGetMsg()
            Case $idAbout 
                MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                        "Version: " & @AutoItVersion & @CRLF & _
                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "", 0, -1) - 1)) 

            Case $idExit ; Exit the loop.
                ExitLoop
        EndSwitch
WEnd
发表于 2017-6-30 15:47:43 | 显示全部楼层
回复 3# JianWudao


    參考 一下 說明書的

TrayItemSetOnEvent  範例

托盤的事情 跟反應  可以用 事件 註冊

有人按鈕個 就會自動呼叫 函數處理
 楼主| 发表于 2017-6-30 15:52:49 | 显示全部楼层
回复 4# kk_lee69


    看了这个范例的,但是里面还是有用到一个While循环
Func Example()
        TrayCreateItem("About")

        TrayCreateItem("") ; Create a separator line.

        TrayCreateItem("Exit")
        TrayItemSetOnEvent(-1, "ExitScript")

        TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "TrayEvent")
        TraySetOnEvent($TRAY_EVENT_SECONDARYUP, "TrayEvent")

        TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.

        While 1
                Sleep(100) ; An idle loop.
        WEnd
EndFunc   ;==>Example

Func TrayEvent()
        Switch @TRAY_ID ; Check the last tray item identifier.
                Case $TRAY_EVENT_PRIMARYDOUBLE                        
                        MsgBox($MB_SYSTEMMODAL, "", "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.

                Case $TRAY_EVENT_SECONDARYUP
                        MsgBox($MB_SYSTEMMODAL, "", "The secondary mouse button was released on the tray icon.")

        EndSwitch
EndFunc   ;==>TrayEvent
发表于 2017-6-30 15:53:04 | 显示全部楼层
回复 3# JianWudao


    註冊
TrayItemSetOnEvent($idAbout, "About")
TrayItemSetOnEvent($idExit, "idExit")

Func About()
                MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                        "Version: " & @AutoItVersion & @CRLF & _
                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1) - 1))
EndFunc   


Func idExit()
   ExitLoop
EndFunc   

這樣不就好了
发表于 2017-6-30 15:54:43 | 显示全部楼层
回复 5# JianWudao

大哥

那個 while  是為了不退出程式所存在的

就跟你原本的WHILE 一樣的存在意義

還是不懂 就請上 程式碼'
 楼主| 发表于 2017-6-30 15:55:12 | 显示全部楼层
回复 6# kk_lee69


    去先测试一下,谢谢!
 楼主| 发表于 2017-6-30 16:03:01 | 显示全部楼层
回复 7# kk_lee69


    呃……不好意思,没反应过来。
    懂了,知道那个While的作用了。
本来我之前也是想的,像你举的这个例子这样做,结果走到坑里面去了。

现在初步测试成功,正在加入我的工程里面做进一步测试,谢谢!
发表于 2017-6-30 16:49:18 | 显示全部楼层
回复 9# JianWudao

問題解決了 別忘了修改標題
注意版規
 楼主| 发表于 2017-6-30 17:21:27 | 显示全部楼层
回复 10# kk_lee69


    已经测试OK,谢谢!

    至此,结帖!
发表于 2017-7-2 10:26:36 | 显示全部楼层
回复 10# kk_lee69


    论坛就需要你这样的热心人,赞一个!
发表于 2017-7-6 13:55:45 | 显示全部楼层
论坛就需要你这样的热心人,赞一个!
发表于 2017-7-7 18:41:52 | 显示全部楼层
回复 3# JianWudao


    直接把两句合并到一起不就可以了吗?
While 1
        $Msg = GUIGetMsg()
        Switch $Msg
                Case $Abutton
                        StartA()
                Case $Bbutton
                        StartB()
                Case $GUI_EVENT_CLOSE
                        _AD_Close()
                        Exit
        EndSwitch

        Switch TrayGetMsg()
            Case $idAbout 
                MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                        "Version: " & @AutoItVersion & @CRLF & _
                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "", 0, -1) - 1)) 

            Case $idExit ; Exit the loop.
                ExitLoop
        EndSwitch
WEnd
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-24 00:39 , Processed in 0.082326 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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