Я использую следующий код в приложении 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
Я хочу, чтобы приложение свернулось в системный трей, когда вы нажимаете X окна, чтобы закрыть его. Я выполняю это с помощью следующего кода в событии QueryUnload формы:
Me.WindowState = vbMinimized
Me.Hide
В событии Unload формы я делаю следующее:
Shell_NotifyIcon NIM_DELETE, nid
ПРОБЛЕМА заключается в том, что когда я закрываю операционную систему и Windows отправляет в приложение сообщение WM_CLOSE, QueryUnload запускается, но, по-видимому, не событие Unload, поскольку Windows подсказывает мне, что она хочет завершить мою задачу.
Есть идеи, как изящно закрыть приложение при завершении работы Windows?
Спасибо