Attribute VB_Name = "mdlSysTray"
Option Explicit

Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Private Const GW_HWNDPREV = 3
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private 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

Private 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

Private iLastIco As Long
Private iOldIco As Long
Private sOldStatus As String
Private nid As NOTIFYICONDATA

Public Sub AddSysTray()
    With nid
       .cbSize = Len(nid)
       .hwnd = frmSvPOPSet.hwnd
       .uID = vbNull
       .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
       .uCallbackMessage = WM_MOUSEMOVE
       .hIcon = frmSvPOPSet.imgInit.Picture.Handle
       .szTip = "Initialising..." & vbNullChar
    End With
    Shell_NotifyIcon NIM_ADD, nid
End Sub

Public Sub SaveSysTray()
    With nid
       iOldIco = .hIcon
       sOldStatus = .szTip
    End With
End Sub

Public Sub RestoreSysTray()
    With nid
       .cbSize = Len(nid)
       .hwnd = frmSvPOPSet.hwnd
       .uID = vbNull
       .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
       .uCallbackMessage = WM_MOUSEMOVE
       .hIcon = iOldIco
       .szTip = sOldStatus
    End With
    Shell_NotifyIcon NIM_MODIFY, nid
End Sub

Public Sub ModSysTrayStatus(sStatus As String)
    With nid
       .cbSize = Len(nid)
       .hwnd = frmSvPOPSet.hwnd
       .uID = vbNull
       .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
       .uCallbackMessage = WM_MOUSEMOVE
       .hIcon = iLastIco
       .szTip = sStatus & vbNullChar
    End With
    Shell_NotifyIcon NIM_MODIFY, nid
End Sub

Public Sub ModSysTray(sStatus As String, iIconHandle As Long)
    With nid
        'insert new values
       .cbSize = Len(nid)
       .hwnd = frmSvPOPSet.hwnd
       .uID = vbNull
       .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
       .uCallbackMessage = WM_MOUSEMOVE
       .hIcon = iIconHandle
       .szTip = sStatus & vbNullChar
       iLastIco = .hIcon
    End With
    Shell_NotifyIcon NIM_MODIFY, nid
End Sub

Public Sub ModSysTrayIco(iIconHandle As Long)
    With nid
        'insert new values
       .cbSize = Len(nid)
       .hwnd = frmSvPOPSet.hwnd
       .uID = vbNull
       .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
       .uCallbackMessage = WM_MOUSEMOVE
       .hIcon = iIconHandle
       .szTip = .szTip
       iLastIco = .hIcon
    End With
    Shell_NotifyIcon NIM_MODIFY, nid
End Sub

Public Sub DelSysTray()
    Shell_NotifyIcon NIM_DELETE, nid
End Sub


