找回密码
 加入
搜索
查看: 10722|回复: 14

[AU3基础] 托盘菜单 弹出窗口 如何不暂停脚本!~```[已解决]

 火.. [复制链接]
发表于 2013-7-2 17:14:07 | 显示全部楼层 |阅读模式
本帖最后由 wu5cheng3 于 2013-7-2 22:13 编辑

在论坛里搜索到这么一个帖子,不过貌似没解决!

http://www.autoitx.com/forum.php ... 5%CC%2B%D4%DD%CD%A3


自己的代码如下, 当我右键托盘点退出弹出窗口时.循环语句就暂停工作了,函数x()就没有效果了!
[au3]
;~ Opt("CaretCoordMode", 1)        ;1=绝对位置, 0=相对位置, 2=客户区
;~ Opt("ExpandEnvStrings", 0)      ;0=不展开, 1=展开
;~ Opt("ExpandVarStrings", 0)      ;0=不展开, 1=展开
;~ Opt("GUICloseOnESC", 1)         ;1=按下 ESC 将关闭窗口, 0=按下 ESC 将不关闭窗口
;~ Opt("GUICoordMode", 1)          ;1=绝对位置, 0=相对位置, 2=单元格
;~ Opt("GUIDataSeparatorChar","|") ;"|"为默认
;~ Opt("GUIOnEventMode", 0)        ;0=取消, 1=启用 OnEvent 模式
;~ Opt("GUIResizeMode", 0)         ;0=不调整, <1024 特定的调整值
;~ Opt("GUIEventOptions",0)        ;0=默认, 1=立即通知, 2=GuiCtrlRead 标签索引
;~ Opt("MouseClickDelay", 10)      ;10 毫秒
;~ Opt("MouseClickDownDelay", 10)  ;10 毫秒
;~ Opt("MouseClickDragDelay", 250) ;250 毫秒
;~ Opt("MouseCoordMode", 1)        ;1=绝对位置, 0=相对位置, 2=客户区
;~ Opt("MustDeclareVars", 0)       ;0=无需声明变量, 1=需要预先声明
;~ Opt("PixelCoordMode", 1)        ;1=绝对位置, 0=相对位置, 2=客户区
;~ Opt("SendAttachMode", 0)        ;0=不捆绑, 1=捆绑
;~ Opt("SendCapslockMode", 1)      ;1=保存并恢复, 0=不保存
;~ Opt("SendKeyDelay", 5)          ;5 毫秒
;~ Opt("SendKeyDownDelay", 1)      ;1 毫秒
;~ Opt("TCPTimeout",100)           ;100 毫秒
;~ Opt("TrayAutoPause",0)          ;0=不暂停, 1=暂停
;~ Opt("TrayIconDebug", 0)         ;0=无信息, 1=调试信息
;~ Opt("TrayIconHide", 0)          ;0=显示, 1=隐藏托盘图标
Opt("TrayMenuMode", 3) ;0=扩展, 1=没有默认菜单, 2=没有自动 check, 4=菜单项目ID 不返回
;~ Opt("TrayOnEventMode",0)        ;0=关闭, 1=启用
;~ Opt("WinDetectHiddenText", 0)   ;0=不检测, 1=检测
;~ Opt("WinSearchChildren", 1)     ;0=不搜索, 1=搜索子窗口
;~ Opt("WinTextMatchMode", 1)      ;1=完全匹配, 2=快速匹配
;~ Opt("WinTitleMatchMode", 1)     ;1=开头, 2=子串, 3=完全, 4=高级 , -1 to -4=Nocase
;~ Opt("WinWaitDelay", 250)        ;250 毫秒


Global Const $GUI_EVENT_CLOSE = -3
Global Const $TRAY_EVENT_PRIMARYDOUBLE = -13
Global Const $TRAY_EVENT_PRIMARYDOWN = -7
Global Const $TRAY_EVENT_SECONDARYDOWN = -9


$gui = GUICreate("标题", 300, 170)
GUISetState()

$2 = TrayCreateItem("退出")

While 1
        y()
        x()
        z()
WEnd

Func y()
        $msg = GUIGetMsg()
        Select
                Case $msg = $GUI_EVENT_CLOSE
                        WinSetState( "标题", "",@SW_HIDE)
        EndSelect
EndFunc   ;==>y

Func z()
        $msg = TrayGetMsg()
        Select
                Case $msg = $TRAY_EVENT_PRIMARYDOWN
                        WinSetState( "标题", "",@SW_RESTORE)
                Case $msg = $TRAY_EVENT_SECONDARYDOWN
                        MsgBox(0, "标题", "弹出这个窗口,x()函数就失效了")
                        TrayItemDelete($2)
                        Exit
        EndSelect
EndFunc   ;==>y



Func x()
        WinClose("1")
EndFunc   ;==>x
[/au3]
发表于 2013-7-2 18:48:28 | 显示全部楼层
Opt("TrayAutoPause", 0);取消自动暂停
 楼主| 发表于 2013-7-2 18:52:45 | 显示全部楼层
回复 2# zldfsz


    谢谢解答,这个我之前试过了无效!~
发表于 2013-7-2 19:18:51 | 显示全部楼层
回复 3# wu5cheng3

真无效吗? 为什么我们的有效呢!
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 3)
Opt("TrayOnEventMode", 1)
$2 = TrayCreateItem("退出")
TrayItemSetOnEvent(-1, '_exit')
Local $count = 0
While 1
        If $count = 5 Then Exit
        $count += 1
        y()
        x()
WEnd
Func y()
        MsgBox(0, $count, 'this is y', 3)
EndFunc
Func _exit()
        Exit
EndFunc
Func x()
        MsgBox(0, $count, 'this is x', 2)
EndFunc
 楼主| 发表于 2013-7-2 19:54:08 | 显示全部楼层
本帖最后由 wu5cheng3 于 2013-7-2 19:58 编辑

回复 4# user3000


    用我给出的代码测试一下试试,我这里测试无效.

一个托盘程序,我右键托盘程序弹出菜单(退出) 点选了这个退出出现一个msgbox,此时此刻   在循环语句里面的x() 函数就不运行了(运行我写的代码,新建一个记事本命名为1,你打开就会立即关闭窗口,程序弹出了msgbox对话框后,1.txt记事本就可以正常打开,在循环语句里面执行的函数就没有运行)
发表于 2013-7-2 20:07:44 | 显示全部楼层
回复 5# wu5cheng3


msgbox  有阻断程序的功能,inputbox 也类似!
如果像你那样是在响应托盘的命令里运行它,当然就得不到你想要的结果。
你应该用 traytip (或 tooltip 等)替换此命令, 它们不会阻断程序的运行。
 楼主| 发表于 2013-7-2 20:27:49 | 显示全部楼层
回复 6# user3000


    非常感谢用户兄台的释义,其实是做个程序必须输入密码才能退出该程序.inputbox这类输入数据函数有阻断程序的功能,这么说是au3目前是无法实现这样的功能吗?
发表于 2013-7-2 20:52:45 | 显示全部楼层
回复 7# wu5cheng3
AU3当然能实现这样的功能。
可以考虑用子窗口来实现密码的输入,子窗口(显示与否)不会像INPUTBOX那样阻断程序的正常运行!

评分

参与人数 1金钱 +10 收起 理由
wu5cheng3_bak + 10 谢谢!~

查看全部评分

 楼主| 发表于 2013-7-2 22:10:27 | 显示全部楼层
本帖最后由 wu5cheng3 于 2013-7-2 22:11 编辑

回复 8# user3000
   
再次感谢用户兄台,已解决问题!

[au3]
Opt("GUIOnEventMode", 1)
Opt("TrayMenuMode", 3)

Global Const $GUI_EVENT_CLOSE = -3
Global Const $TRAY_EVENT_PRIMARYDOUBLE = -13
Global Const $TRAY_EVENT_PRIMARYDOWN = -7
Global Const $TRAY_EVENT_SECONDARYDOWN = -9


$zck = GUICreate("主窗口", 300, 170)


GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")


$2 = TrayCreateItem("退出")

While 1
        gui()
        tp()
        x()
WEnd

Func gui()
        $msg = GUIGetMsg()
        Select
                Case $msg = $GUI_EVENT_CLOSE
                        WinSetState("主窗口", "", @SW_HIDE)
        EndSelect
EndFunc   ;==>gui

Func tp()
        $msg = TrayGetMsg()
        Select
                Case $msg = $TRAY_EVENT_PRIMARYDOWN
                        WinSetState("主窗口", "", @SW_RESTORE)
                Case $msg = $TRAY_EVENT_SECONDARYDOWN
                        z()
        EndSelect
EndFunc   ;==>tp

Func x()
        WinClose("1")
EndFunc   ;==>x

Func z()
        $Form2 = GUICreate("子窗口", 303, 202, -1, -1, -1, -1, $zck)
        GUICtrlCreateInput("",10,10,50,20)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_exit_z")
        GUISetState(@SW_SHOW)
EndFunc   ;==>_c_win


Func _exit()
        Exit
EndFunc

Func _exit_z()
        GUIDelete(@GUI_WinHandle)
EndFunc   ;==>_exit_z
[/au3]
发表于 2013-7-9 07:14:53 | 显示全部楼层
终于找到办法解决了 谢谢
发表于 2013-7-9 07:15:16 | 显示全部楼层
终于找到办法解决了 谢谢
发表于 2013-7-9 17:28:01 | 显示全部楼层
学习了........
发表于 2013-7-29 19:31:45 | 显示全部楼层
我来偷师
发表于 2013-8-6 14:49:19 | 显示全部楼层
学习一下。
发表于 2014-12-18 01:54:49 | 显示全部楼层
来学习,这是有用的~~~~~~~~~~~~~~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 12:24 , Processed in 0.106470 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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