wu5cheng3_bak 发表于 2013-7-2 17:14:07

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

本帖最后由 wu5cheng3 于 2013-7-2 22:13 编辑

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

http://www.autoitx.com/forum.php?mod=viewthread&tid=21632&highlight=%CD%D0%C5%CC%2B%D4%DD%CD%A3


自己的代码如下, 当我右键托盘点退出弹出窗口时.循环语句就暂停工作了,函数x()就没有效果了!

;~ 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

zldfsz 发表于 2013-7-2 18:48:28

Opt("TrayAutoPause", 0);取消自动暂停

wu5cheng3_bak 发表于 2013-7-2 18:52:45

回复 2# zldfsz


    谢谢解答,这个我之前试过了无效!~

user3000 发表于 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

wu5cheng3_bak 发表于 2013-7-2 19:54:08

本帖最后由 wu5cheng3 于 2013-7-2 19:58 编辑

回复 4# user3000


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

一个托盘程序,我右键托盘程序弹出菜单(退出) 点选了这个退出出现一个msgbox,此时此刻   在循环语句里面的x() 函数就不运行了(运行我写的代码,新建一个记事本命名为1,你打开就会立即关闭窗口,程序弹出了msgbox对话框后,1.txt记事本就可以正常打开,在循环语句里面执行的函数就没有运行)

user3000 发表于 2013-7-2 20:07:44

回复 5# wu5cheng3


msgbox有阻断程序的功能,inputbox 也类似!
如果像你那样是在响应托盘的命令里运行它,当然就得不到你想要的结果。
你应该用 traytip (或 tooltip 等)替换此命令, 它们不会阻断程序的运行。

wu5cheng3_bak 发表于 2013-7-2 20:27:49

回复 6# user3000


    非常感谢用户兄台的释义,其实是做个程序必须输入密码才能退出该程序.inputbox这类输入数据函数有阻断程序的功能,这么说是au3目前是无法实现这样的功能吗?

user3000 发表于 2013-7-2 20:52:45

回复 7# wu5cheng3
AU3当然能实现这样的功能。
可以考虑用子窗口来实现密码的输入,子窗口(显示与否)不会像INPUTBOX那样阻断程序的正常运行!

wu5cheng3_bak 发表于 2013-7-2 22:10:27

本帖最后由 wu5cheng3 于 2013-7-2 22:11 编辑

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


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

pyj521 发表于 2013-7-9 07:14:53

终于找到办法解决了 谢谢

pyj521 发表于 2013-7-9 07:15:16

终于找到办法解决了 谢谢

浪迹红客 发表于 2013-7-9 17:28:01

学习了........

llllllxllllll 发表于 2013-7-29 19:31:45

我来偷师{:face (239):}

pccp 发表于 2013-8-6 14:49:19

学习一下。

easyt 发表于 2014-12-18 01:54:49

来学习,这是有用的~~~~~~~~~~~~~~~
页: [1]
查看完整版本: 托盘菜单 弹出窗口 如何不暂停脚本!~```[已解决]