请问这段代码为什么不能显示托盘选项,问题出在什么地方?(已解决)
本帖最后由 天之骄子 于 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 请问放到什么位置?谢谢 回复 3# 天之骄子
While 1
Sleep(100)
WEnd
童鞋,这就是个死循环,后面的函数啥的除非在这个循环前被注册过了、被调用了,否则是执行不到的。 回复 4# xiehuahere
把这段代码删除或把
$guanyu = TrayCreateItem("关于") ;托盘菜单源码开始
$fangwen= TrayCreateItem("访问")
$settingsitem = TrayCreateMenu("跟随系统启动")
$displayitemYes = TrayCreateItem("跟随系统启动", $settingsitem)
$printeritemNo = TrayCreateItem("不随系统启动", $settingsitem)
TrayCreateItem("")
放到上边后,虽然显示托盘菜单了,但点击菜单上的选项后,没反应。 回复 2# zhao_ming
谢谢,虽然显示托盘菜单了,但点击菜单上的选项后没反应 回复 5# 天之骄子
原因同4#
你的托盘菜单响应函数放在第一个死循环后。两个while 1死循环,第一个循环出不来,怎么会执行第二个循环呢?
建议对托盘用事件模式 Opt("TrayOnEventMode", 1)
看看TrayItemSetOnEvent的帮助吧~~ 回复 7# xiehuahere
我仔细看看帮助改改吧,谢谢您!
开机只启动托盘,但不启打开窗口怎么做? 回复xiehuahere
我仔细看看帮助改改吧,谢谢您!
开机只启动托盘,但不启打开窗口怎么做?
天之骄子 发表于 2012-11-22 16:42 http://www.autoitx.com/images/common/back.gif#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 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:58 编辑
回复 9# afan
谢谢afan 超级版主,试了试可以了,呵呵,真实太感谢了!
页:
[1]