Inserire l'Icona del Programma sulla SysTray

In un modulo Bas inserire:

Option Explicit

Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Type NOTIFYICONDATA
    cbze As Long
    hwnd As Long
    exid As Long
    flags As Long
    backmessage As Long
    icon As Long
    tip As String * 64
End Type

Public Const IcD_ADD = &H0&
Public Const IcD_MODIFY = &H1
Public Const IcD_DELETE = &H2
Public Const IcD_BACKMESSAGE = &H1
Public Const IcD_ICON = &H2
Public Const IcD_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public IcD As NOTIFYICONDATA

'Crea l'Icona sulla SysTray
Public Sub CreaIcoSys(pic As PictureBox)
Dim lresult As Long, IcDm_ADD As Long

IcD.cbze = Len(IcD)
IcD.hwnd = pic.hwnd
IcD.exid = 0
IcD.exid = IcD.exid + 1
IcD.flags = IcD_BACKMESSAGE Or IcD_ICON Or IcD_TIP
'la Picture deve essere in formato .ico di dimensioni 16x16 o di un loro multiplo
IcD.icon = pic.Picture
'Tip da visualizzare al passaggio del mouse sull'icona sulla SysTray
IcD.tip = "CostiInternet © Franco Sciarrone" + Chr$(0)
IcD.backmessage = WM_MOUSEMOVE
lresult = Shell_NotifyIconA(IcDm_ADD, IcD)
End Sub

'Distrugge l'Icona sulla SysTray
Public Sub DelIcoSys()
Shell_NotifyIconA IcD_DELETE, IcD
End Sub

In un Form mettere una PictureBox e collegare alla sua proprietą Picture un'immagine in formato *.ico, di dimensioni 16x16 o di un loro multiplo.
Collocare una Label al centro del Form.

Inserire questo codice d'esempio:

Option Explicit

Private Sub Form_Load()
CreaIcoSys Picture1
End Sub

Private Sub Form_Unload(Cancel As Integer)
DelIcoSys
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tray As Long

tray = (X And &HFF) * &H100
Select Case tray
    Case 0
'Sei sull'icona
        Label1 = "Sei sull'icona"
    Case &H2D00
'Doppio Click sinistro
        Label1 = "Hai premuto il doppio click Sinistro"
    Case &H5A00
'Doppio Click destro
        Label1 = "Hai premuto il doppio click Destro"
    Case &H1E00
'Bottone Sinistro
        Label1 = "Hai premuto il bottone Sinistro"
    Case &HF00
'Bottone Sinistro
        Label1 = "Hai premuto il bottone Sinistro"
    Case &H3C00
'Bottone Destro
        Label1 = "Hai premuto il bottone Destro"
    Case &H4B00
'Bottone Destro
        Label1 = "Hai premuto il bottone Destro"
End Select
End Sub

Se si desidera che il Form sia invisibile ed all'icona sia collegato un menu, eseguire quanto segue.

In un Form  mettere una PictureBox e collegare alla sua proprietą Picture un'immagine in formato *.ico, di dimensioni 16x16 o di un loro multiplo.
Con l'Editor di Menu creare un Menu, inserire un unico menu con alcuni sottomenu. Assegnare alla prima voce del menu la proprietą Name = mnuFile ed all'ultima la proprietą Name = mnuChiudi
Deselezionare la CheckBox Visible di mnuFile.
Mettere la proprietą del Form Visible=False.

Infine inserire questo codice d'esempio:

Option Explicit

Private Sub Form_Load()
CreaIcoSys Picture1
End Sub

Private Sub mnuChiudi_Click()
DelIcoSys
Unload Me
End
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tray As Long

tray = (X And &HFF) * &H100
Select Case tray
   
'Case 0 'Sei sull'icona
        ' MsgBox "Sei sull'icona"
    'Case &H2D00 'Doppio Click sinistro
        ' MsgBox "Hai premuto il doppio click Sinistro"
    'Case &H5A00 'Doppio Click destro
        ' MsgBox "Hai premuto il doppio click Destro"
    'Case &H1E00 'Bottone Sinistro
        ' MsgBox "Hai premuto il bottone Sinistro"
    'Case &HF00 'Bottone Sinistro"
        ' MsgBox "Hai premuto il bottone Sinistro"

    Case &H3C00
'Bottone Destro
        PopupMenu mnuFile, vbPopupMenuRightButton, , , mnuChiudi
   
'Case &H4B00 'Bottone Destro
    ' MsgBox "Hai premuto il bottone Destro"

End Select
End Sub

Testato su: Windows 98, Windows Me, Windows 2000 Professional