Windows 关闭时,VB 6.0 系统托盘应用程序无法正常关闭

Mat*_*att 3 vb6 winapi

我在 VB 6.0 应用程序中使用以下代码来为应用程序提供系统托盘图标:

Option Explicit

'user defined type required by Shell_NotifyIcon API call
Public Type NOTIFYICONDATA
   cbSize As Long
   hwnd As Long
   uId As Long
   uFlags As Long
   uCallBackMessage As Long
   hIcon As Long
   szTip As String * 64
End Type

'constants required by Shell_NotifyIcon API call:
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201     'Button down
Public Const WM_LBUTTONUP = &H202       'Button up
Public Const WM_LBUTTONDBLCLK = &H203   'Double-click
Public Const WM_RBUTTONDOWN = &H204     'Button down
Public Const WM_RBUTTONUP = &H205       'Button up
Public Const WM_RBUTTONDBLCLK = &H206   'Double-click

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Public nid As NOTIFYICONDATA
Run Code Online (Sandbox Code Playgroud)

我希望当您单击窗口的 X 关闭应用程序时,应用程序最小化到系统托盘。我在表单的 QueryUnload 事件中使用以下代码来完成此操作:

Me.WindowState = vbMinimized
Me.Hide
Run Code Online (Sandbox Code Playgroud)

在表单的卸载事件中,我执行以下操作:

Shell_NotifyIcon NIM_DELETE, nid
Run Code Online (Sandbox Code Playgroud)

问题是,当我关闭操作系统并且 Windows 向应用程序发送 WM_CLOSE 消息时,QueryUnload 被触发,但显然不是 Unload 事件,因为 Windows 提示我它想要结束我的任务。

关于如何让应用程序在 Windows 关闭时正常关闭有什么想法吗?

谢谢

JFV*_*JFV 5

这是我在关闭 Query_Unload 程序时使用的:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Select Case UnloadMode
        Case 1, 2, 3 'If the program is being terminated by Code, Windows shutting down, or Task Manager
            Cancel = False 'Allow the program termination
            Unload Me
        Case Else
            Cancel = True 'Else disallow the termination
    End Select
End Sub
Run Code Online (Sandbox Code Playgroud)

如果是情况 2(Windows 关闭),我会继续让程序终止。

让我知道这是否有帮助!JFV