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


gyp2000 发表于 2023-10-30 11:39:59

本帖最后由 gyp2000 于 2023-10-30 11:49 编辑

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

可以添加参数
Opt("GUIEventOptions", 1)
禁止窗口最小化, 最大化, 还原, 改变大小等的点击行为

smooth 发表于 2023-10-30 15:19:22

gyp2000 发表于 2023-10-30 11:39
由于没拦截最小化指令。
点击最小化会先执行最小化。
然后才会执行 GUISetState(@SW_HIDE, $hGui)


牛,谢谢大佬,你的办法可以解决这个问题。
页: [1]
查看完整版本: 点击最小化按钮时如果隐藏程序界面,托盘右键菜单无法将其弹起【已解决】