tags:

views:

872

answers:

2

Hi

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

+2  A: 

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

If Case 2 (Windows Shutting Down), I go ahead and let the program terminate.

Let me know if this helps! JFV

JFV
+1  A: 

Here is an example implementation from vbnet http://vbnet.mvps.org/index.html?code/subclass/shellnotifybasic.htm

Will Rickards