找回密码
 加入
搜索
查看: 389|回复: 2

[网络通信] 点击最小化按钮时如果隐藏程序界面,托盘右键菜单无法将其弹起【已解决】

[复制链接]
发表于 2023-10-30 10:48:58 | 显示全部楼层 |阅读模式
本帖最后由 smooth 于 2023-10-30 15:19 编辑


如果点击最小化按钮时如果隐藏程序界面,托盘右键菜单无法将其弹起;如果在后面再加上一个Msgbox,则点连击鼠标左键,也无法将程序界面弹起。

为了解决这个问题,注册了一个消息函数,把Msgbox放在消息函数里,这样可以解决鼠标左键弹起的问题,但托盘右键菜单,依然无法将界面弹起。

然后我将GUISetState(@SW_HIDE, $hGui)放在消息函数里,则无法隐藏程序界面。





#NoTrayIcon
#RequireAdmin
#include <TrayConstants.au3>

TraySetClick(8) ;点击右键显示系统托盘的菜单
Global $Title = "自动***"
Global $hGui = GUICreate($Title, 410, 240) ;$WS_EX_TOOLWINDOW
GUISetBkColor(0xCCCCFF, $hGui);0x304040

Opt("TrayMenuMode", 1 + 2) ; 默认托盘菜单项目(脚本已暂停/退出脚本) (Script Paused/Exit) 将不显示.
TrayCreateItem("验证***")
TrayCreateItem("")
Global $xShouGui = TrayCreateItem("显示界面")
TrayCreateItem("")
Global $aboutitem = TrayCreateItem("关于")
TrayCreateItem("")
Global $exititem = TrayCreateItem("退出")
TraySetState(1)  ;显示托盘图标
TraySetToolTip("验证***")

GUIRegisterMsg(0x0112, "WM_SYSCOMMAND")

;主循环
While 1
        Switch GUIGetMsg()
                Case -3
                        If MsgBox(1 + 32, "提示", "确定关闭程序?", "", $hGui) = 1 Then
                            GUIDelete($hGui)
                            Exit                
                        EndIf
                Case -4 ;点击最小化按钮
                        GUISetState(@SW_HIDE, $hGui)
;~                         MsgBox(48, '提示', "将最小化到托盘(任务栏通知区域)!")
        EndSwitch
        
        Switch TrayGetMsg()
                Case 0
                        ContinueLoop
                Case $TRAY_EVENT_PRIMARYDOWN ;点击鼠标左键,显示程序界面
                        GUISetState(@SW_SHOW, $hGui)
                Case $xShouGui
                        GUISetState(@SW_SHOW, $hGui)
                Case $aboutitem
                        MsgBox(64, "关于", "自动输入****。" & @CRLF & @CRLF & "退出程序热键:Ctrl+Alt+B。" & @CRLF & @CRLF & "                                 2023/10/13")
                Case $exititem
                        ExitLoop
        EndSwitch
WEnd

Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
        Local $iID = BitAND($wParam, 0xFFFF) 
        If ($iID = 0xF020) Then
       MsgBox(48, '提示', "将最小化到托盘(任务栏通知区域)!")
        EndIf
EndFunc   ;==>WM_SYSCOMMAND


发表于 2023-10-30 11:39:59 | 显示全部楼层
本帖最后由 gyp2000 于 2023-10-30 11:49 编辑

由于没拦截最小化指令。
点击最小化会先执行最小化。
然后才会执行 GUISetState(@SW_HIDE, $hGui)
恢复显示的时候就会出现显示的窗口是最小化状态的问题。

可以添加参数
Opt("GUIEventOptions", 1)
禁止窗口最小化, 最大化, 还原, 改变大小等的点击行为
 楼主| 发表于 2023-10-30 15:19:22 | 显示全部楼层
gyp2000 发表于 2023-10-30 11:39
由于没拦截最小化指令。
点击最小化会先执行最小化。
然后才会执行 GUISetState(@SW_HIDE, $hGui)

牛,谢谢大佬,你的办法可以解决这个问题。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 09:49 , Processed in 0.077097 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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