Voici un bout de code qui n'explique rien sur le fonctionnement des icônes dans le systray. Il y a déjà assez de sources là-dessus sur VBFrance!!!
Alors que fait ce programme me direz-vous?
Et ben, il permet de recréer l'icône de notre appli lorsqu'elle a disparu après un plantage de explorer.exe.
La méthode est simple, on crée un Hook sur notre fenêtre et on enregistre le message "TaskbarCreated". C'est à dire que lorsque Windows recréra la barre de tâches, notre appli sera avertie et donc on pourra recréer notre icône. Vous suivez???
Voilà donc rien de bien compliqué et le code est facilement intégrable dans vos applis utilisant le systray.
Source / Exemple :
'Dans le Form
Option Explicit
Private Sub Form_Load()
InstalleHookSystray Me.HWnd
IconeT.cbSize = Len(IconeT)
IconeT.HWnd = Me.HWnd
IconeT.uID = 1&
IconeT.uFlags = ICONE Or TIP Or MESSAGE
IconeT.uCallbackMessage = MOUSEMOVE
IconeT.hIcon = Form1.Icon
Shell_NotifyIcon AJOUT, IconeT
End Sub
Private Sub Form_Unload(Cancel As Integer)
DesinstalleHookSystray Me.HWnd
Shell_NotifyIcon SUPPRIME, IconeT
End Sub
'Et dans le module
Option Explicit
'APIs de Hook
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'API systray
Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As IconeTray) As Boolean
Public Type IconeTray
cbSize As Long
HWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Const AJOUT = &H0
Public Const SUPPRIME = &H2
Public Const MOUSEMOVE = &H200
Public Const MESSAGE = &H1
Public Const ICONE = &H2
Public Const TIP = &H4
Private Const GWL_WNDPROC = (-4)
Dim m_TaskbarCreated As Long
Dim Save_WndProc_Adresse As Long
Public IconeT As IconeTray
Public Sub InstalleHookSystray(lHwnd As Long)
'On installe un Hook sur le message TaskbarCreated
m_TaskbarCreated = RegisterWindowMessage("TaskbarCreated")
Save_WndProc_Adresse = SetWindowLong(lHwnd, GWL_WNDPROC, AddressOf Capture_Message_Windows)
End Sub
Public Sub DesinstalleHookSystray(lHwnd As Long)
SetWindowLong lHwnd, GWL_WNDPROC, Save_WndProc_Adresse
End Sub
Private Function Capture_Message_Windows(ByVal HWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'Si le message correspond alors on recrée l'icône
If uMsg = m_TaskbarCreated Then
Shell_NotifyIcon AJOUT, IconeT
End If
Capture_Message_Windows = CallWindowProc(Save_WndProc_Adresse, HWnd, uMsg, wParam, lParam)
End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.