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
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
In the form’s Unload event I do the following:
Shell_NotifyIcon NIM_DELETE, nid
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.
Any ideas on how to get the application to close gracefully on Windows shutdown?
Thanks
This is what I use when I am closing my programs for the Query_Unload:
If Case 2 (Windows Shutting Down), I go ahead and let the program terminate.
Let me know if this helps! JFV