Windows 关闭时 VB 6.0 系统托盘应用程序不会正常关闭 [英] VB 6.0 system tray application doesn't close gracefully when Windows shuts down
问题描述
我在 VB 6.0 应用程序中使用以下代码来为应用程序提供系统托盘图标:
I'm using the following code within a VB 6.0 application to allow give the application a system tray icon:
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
当您单击窗口的 X 关闭它时,我希望应用程序最小化到系统托盘.我在表单的 QueryUnload 事件中使用以下代码完成此操作:
I want the application to minimize to the system tray when you click the Window's X to close it. I accomplish this with the following code in the form's QueryUnload event:
Me.WindowState = vbMinimized
Me.Hide
在表单的 Unload 事件中,我执行以下操作:
In the form's Unload event I do the following:
Shell_NotifyIcon NIM_DELETE, nid
问题是当我关闭操作系统并且 Windows 向应用程序发送 WM_CLOSE 消息时,QueryUnload 被触发但显然不是 Unload 事件,因为 Windows 提示我它想要结束我的任务.
The PROBLEM is that when I shut down the operating system and Windows sends the WM_CLOSE message to the app, QueryUnload is being fired but apparently not the Unload event, since Windows prompts me that it wants to end my task.
有关如何在 Windows 关机时正常关闭应用程序的任何想法?
Any ideas on how to get the application to close gracefully on Windows shutdown?
谢谢
推荐答案
这是我在关闭 Query_Unload 程序时使用的:
This is what I use when I am closing my programs for the 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
如果情况 2(Windows 关闭),我会继续让程序终止.
If Case 2 (Windows Shutting Down), I go ahead and let the program terminate.
让我知道这是否有帮助!JFV
Let me know if this helps! JFV
这篇关于Windows 关闭时 VB 6.0 系统托盘应用程序不会正常关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!