找回密码
 加入
搜索
查看: 4612|回复: 8

[AU3基础] 请问这段代码为什么不能显示托盘选项,问题出在什么地方?(已解决)

  [复制链接]
发表于 2012-11-22 12:02:30 | 显示全部楼层 |阅读模式
本帖最后由 天之骄子 于 2012-11-23 08:55 编辑

我写了个窗口,先加入的托盘菜单,运行后可以正常显示托盘菜单。但加入了点窗口最小化隐藏界面,双击托盘后显示界面的代码后,只执行第二次加入的隐藏和双击后打开窗口,但是托盘菜单不显示了,
1.请问这段代码问题出在什么地方?
2.代码在执行“跟随系统启动”后,现在开机时直接打开窗口,但我想开机后只启动托盘,请问该怎么做?
我是菜鸟,请求解决。谢谢了。
这是原来的托盘菜单
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <ACN_HASH.au3>
#include <Constants.au3>
Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)
Opt("GUIOnEventMode", 1)
Opt("GUIOnEventMode", 1)
Local $sRegPath = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
      
$Form1 = GUICreate("窗口", 321, 192, -1, -1, -1, -1, WinGetHandle(AutoItWinGetTitle()))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetState(@SW_SHOW)
 
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1") ;点最小化后,隐藏界面,双击托盘后显示界面开始
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1")
TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "TrayEvent")
While 1
        Sleep(100)
WEnd
Func TrayEvent()
        Switch @TRAY_ID
                Case $TRAY_EVENT_PRIMARYDOUBLE
                        GUISetState(@SW_SHOWNORMAL)
        EndSwitch
EndFunc   ;==>TrayEvent
Func Form1()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_MINIMIZE
                        GUISetState(@SW_HIDE)
        EndSwitch
EndFunc   ;==>Form1           ;点最小化后,隐藏界面,双击托盘后显示界面结束
 
$guanyu = TrayCreateItem("关于")   ;托盘菜单源码开始
$fangwen= TrayCreateItem("访问")   
$settingsitem = TrayCreateMenu("跟随系统启动")
$displayitemYes = TrayCreateItem("跟随系统启动", $settingsitem)
$printeritemNo = TrayCreateItem("不随系统启动", $settingsitem)
TrayCreateItem("")
$exit = TrayCreateItem("退出")
TraySetState()
 
If RegRead($sRegPath, @ScriptName) <> '' Then
        TrayItemSetState($displayitemYes, $TRAY_CHECKED)
Else
        TrayItemSetState($printeritemNo, $TRAY_CHECKED)
EndIf
GUISetState()
 
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case - 3
                        Exit
 
        EndSwitch
 
        $msg = TrayGetMsg()
        Select
                Case $msg = $exit
                        Exit
                Case $msg = $displayitemYes
                        RegWrite($sRegPath, @ScriptName, 'REG_SZ', '"' & @ScriptFullPath & '" /AUTO')
                        MsgBox(0, '状态:', '跟随系统启动')
                Case $msg = $printeritemNo
                        RegDelete($sRegPath, @ScriptName)
                        MsgBox(0, '状态:', '不随系统启动')
                                Case $msg = $fangwen
                                                Run("rundll32.exe url.dll,FileProtocolHandler http://hi.baidu.com/zizhuxiaoyuan/blog")
                                Case $msg=$guanyu
                                                MsgBox(64, '关于', @CRLF & "你好,我好,大家好!")                                                
                EndSelect
WEnd       ;托盘菜单源码结束

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-11-22 12:50:58 | 显示全部楼层
请问放到什么位置?谢谢
发表于 2012-11-22 12:54:56 | 显示全部楼层
回复 3# 天之骄子


While 1
        Sleep(100)
WEnd

童鞋,这就是个死循环,后面的函数啥的除非在这个循环前被注册过了、被调用了,否则是执行不到的。
 楼主| 发表于 2012-11-22 13:35:43 | 显示全部楼层
回复 4# xiehuahere

把这段代码删除或把
$guanyu = TrayCreateItem("关于")   ;托盘菜单源码开始
$fangwen= TrayCreateItem("访问")   
$settingsitem = TrayCreateMenu("跟随系统启动")
$displayitemYes = TrayCreateItem("跟随系统启动", $settingsitem)
$printeritemNo = TrayCreateItem("不随系统启动", $settingsitem)
TrayCreateItem("")
放到上边后,虽然显示托盘菜单了,但点击菜单上的选项后,没反应。
 楼主| 发表于 2012-11-22 13:38:57 | 显示全部楼层
回复 2# zhao_ming


    谢谢,虽然显示托盘菜单了,但点击菜单上的选项后没反应
发表于 2012-11-22 15:42:30 | 显示全部楼层
回复 5# 天之骄子

原因同4#
你的托盘菜单响应函数放在第一个死循环后。两个while 1死循环,第一个循环出不来,怎么会执行第二个循环呢?

建议对托盘用事件模式 Opt("TrayOnEventMode", 1)
看看TrayItemSetOnEvent的帮助吧~~
 楼主| 发表于 2012-11-22 16:42:16 | 显示全部楼层
回复 7# xiehuahere

我仔细看看帮助改改吧,谢谢您!
开机只启动托盘,但不启打开窗口怎么做?
发表于 2012-11-22 18:45:00 | 显示全部楼层
回复  xiehuahere

我仔细看看帮助改改吧,谢谢您!
开机只启动托盘,但不启打开窗口怎么做?
天之骄子 发表于 2012-11-22 16:42
#include <GUIConstantsEx.au3>
#include <Constants.au3>

Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)
Opt("GUIOnEventMode", 1)

Local $sRegPath = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'

$Form1 = GUICreate("窗口", 321, 192, -1, -1, -1, -1, WinGetHandle(AutoItWinGetTitle()))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
If Not $CmdLine[0] Then GUISetState(@SW_SHOW)

GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1");点最小化后,隐藏界面
TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "TrayEvent");双击托盘后显示界面开始

$guanyu = TrayCreateItem("关于") ;托盘菜单源码开始
TrayItemSetOnEvent(-1, 'TrayEvent')
$fangwen = TrayCreateItem("访问")
TrayItemSetOnEvent(-1, 'TrayEvent')
$settingsitem = TrayCreateMenu("跟随系统启动")
$displayitemYes = TrayCreateItem("跟随系统启动", $settingsitem)
TrayItemSetOnEvent(-1, 'TrayEvent')
$printeritemNo = TrayCreateItem("不随系统启动", $settingsitem)
TrayItemSetOnEvent(-1, 'TrayEvent')
TrayCreateItem("")
$exit = TrayCreateItem("退出")
TrayItemSetOnEvent(-1, 'TrayEvent')
TraySetState()

If RegRead($sRegPath, @ScriptName) <> '' Then
        TrayItemSetState($displayitemYes, $TRAY_CHECKED)
Else
        TrayItemSetState($printeritemNo, $TRAY_CHECKED)
EndIf

While 1
        Sleep(100)
WEnd

Func TrayEvent()
        Switch @TRAY_ID
                Case $TRAY_EVENT_PRIMARYDOUBLE
                        GUISetState(@SW_SHOWNORMAL)
                Case $displayitemYes
                        ;;;RegWrite($sRegPath, @ScriptName, 'REG_SZ', '"' & @ScriptFullPath & '" /AUTO')
                        MsgBox(0, '状态:', '跟随系统启动')
                Case $printeritemNo
                        ;;;RegDelete($sRegPath, @ScriptName)
                        MsgBox(0, '状态:', '不随系统启动')
                Case $fangwen
                        ;;;Run("rundll32.exe url.dll,FileProtocolHandler http://hi.baidu.com/zizhuxiaoyuan/blog")
                Case $guanyu
                        MsgBox(64, '关于', @CRLF & "你好,我好,大家好!")
                Case $exit
                        Exit
        EndSwitch
EndFunc   ;==>TrayEvent

Func Form1()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_MINIMIZE
                        GUISetState(@SW_HIDE)
        EndSwitch
EndFunc   ;==>Form1

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close
 楼主| 发表于 2012-11-22 18:54:27 | 显示全部楼层
本帖最后由 天之骄子 于 2012-11-22 18:58 编辑

回复 9# afan

谢谢afan 超级版主,试了试可以了,呵呵,真实太感谢了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 19:14 , Processed in 0.142755 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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