Ces procédures servent à ne pas afficher le bouton dans la barre de tâches (*), et quand même afficher le prog dans le Systray.

Il faut créer un contrôle pour recevoir l’évènement qui gèrera l’icône. Ce contrôle doit être invisible car l’évènement est le mousemove, et il ne faut pas que le passage de la souris perturbe la fonction.

J’ai choisi un pictureBox nommé « PicSystray » placé dans la FraBid invisible.

A mettre dans le Général du module:
‘Mise en systray
Type IconeTray
    cbSize As Long      ‘Taille de l’icône (en octets)
    hwnd As Long        ‘Handle du contrôle chargé de recevoir les messages envoyés lors des évènements sur l’icône (clics, doubles-clics…)
    uID As Long         ‘Identificateur de l’icône
    uFlags As Long
    uCallbackMessage As Long    ‘Messages à renvoyer
    hIcon As Long               ‘Handle de l’icône
    szTip As String * 64        ‘Texte à mettre dans la bulle d’aide
End Type
Global IconeT As IconeTray

Declare Function Shell_NotifyIcon Lib « shell32 » Alias « Shell_NotifyIconA » (ByVal dwMessage As Long, pnid As IconeTray) As Boolean

‘Constantes nécessaires
Public Const AJOUT = &H0
Public Const MODIF = &H1
Public Const SUPPRIME = &H2
Public Const MOUSEMOVE = &H200
Public Const MESSAGE = &H1
Public Const Icone = &H2
Public Const TIP = &H4
Public Const DOUBLE_CLICK_GAUCHE = &H203
Public Const BOUTON_GAUCHE_POUSSE = &H201
Public Const BOUTON_GAUCHE_LEVE = &H202
Public Const DOUBLE_CLICK_DROIT = &H206
Public Const BOUTON_DROIT_POUSSE = &H204
Public Const BOUTON_DROIT_LEVE = &H205

A mettre dans le Load de la Form:
    ‘——————————Icône dans le Systray
    IconeT.cbSize = Len(IconeT) ‘Taille de l’icône en octet
    IconeT.hwnd = PicSystray.hwnd       ‘Handle de l’application (pour qu’elle reçoive les messages envoyés lors d’un clic, double-clic…
    IconeT.uID = 1&             ‘Identificateur de l’icône
    IconeT.uFlags = Icone Or TIP Or MESSAGE
    IconeT.uCallbackMessage = MOUSEMOVE     ‘Renvoyer les messages concernant l’action de la souris
    IconeT.hIcon = Me.Icon   ‘Mettre en icône l’image celle de la form
    IconeT.szTip = me.caption & Chr$(0)    ‘Texte de la bulle d’aide
    ‘Appel de la fonction pour mettre l’icône dans le système tray
    Shell_NotifyIcon AJOUT, IconeT
    ‘Me.Hide   ‘Cache la fenêtre
    App.TaskVisible = False     ‘Retire le bouton de l’application de la barre des tâches (*)

A mettre dans le resize de la form:
    ‘————————-Permet de transformer le minimize en hide.
    If Me.WindowState = 1 Then
        Me.Hide
        DoEvents
        Me.WindowState = 0
    End If

A mettre dans le MouseMouve de PicSystray:
   ‘souris sur l’icône placée dans le système tray
    Static rec As Boolean, msg As Long
    msg = X / Screen.TwipsPerPixelX
    If Not rec Then
        rec = True
        Select Case msg
            Case DOUBLE_CLICK_GAUCHE:
            Case BOUTON_GAUCHE_POUSSE:
                If Me.Visible Then
                    Me.Hide
                Else
                    Me.Show
                End If
            Case BOUTON_GAUCHE_LEVE:
            Case DOUBLE_CLICK_DROIT:
            Case BOUTON_DROIT_POUSSE:
            Case BOUTON_DROIT_LEVE:
        End Select
        rec = False
    End If

 A chaque fois que l’on veut modifier, Ex: le ToolTipText et l’icône:
    IconeT.szTip = « Mon ToolTipText à moi…  »  & Chr$(0)    ‘Texte de la bulle d’aide
    IconeT.hIcon = Me.Icon   ‘Mettre en icône celle de la form
    Shell_NotifyIcon MODIF, IconeT
Cela peut servir à avoir une icône animée (par Ex: gyrophare) si l’on met ces lignes dans une tempo.

A mettre dans l’Unload de la form (pour que le SysTray soit rafraîchi sans avoir à passer la souris dessus):
    Shell_NotifyIcon SUPPRIME, IconeT