Menu Content/Inhalt

Syndication

Abonnez-vous à ce fil RSS pour être tenu informé des nouveautés de ce site.

NotifyIcon Convertir en PDF Version imprimable Suggérer par mail
Écrit par Gilles LAURENT   
03-12-2008

Afficher un icône dans la zone de notification

Une question de Sylvain (Alias Scarabé) reçue par voie de messagerie il y a quelques jours était de connaitre la méthode à utiliser pour afficher un icône dans la zone de notification en VBScript avec le composant COM DynaWrap. Vous trouverez donc ci-dessous, à titre d'exemple, le script NotifyIcon.vbs permettant de réaliser cette tâche.

Note: Dans le cadre de ce projet, le composant COM DynaWrap est utilisé pour invoquer les API Win32 suivantes :

1- Librairie dynamique User32.dll

  • GetDesktopWindow
  • LoadImage
  • DestroyIcon

2- Librairie dynamique Shell32.dll

  • Shell_NotifyIcon

3- Librairie dynamique Kernel32.dll

  • GetCurrentProcessId

Historique:

Version 1.1 - 20081204
                        - possibilité d'exécuter le script de manière simultanée
                        - un icône est affiché pour chaque instance avec le Pid comme uID
                        - le Pid est affiché dans le titre de la fenêtre et également dans le Tip de l'icône

Version 1.0 - 20081203
                        - Première Release Publique

Plateformes supportées:
Windows 2000 et versions supérieures

Listing 1 : NotifyIcon.vbs

  1. Option Explicit
  2. ' déclaration des constantes
  3. Const DW_BSTR = 0
  4. Const DW_LONG = 4
  5. Const IMAGE_ICON = 1
  6. Const LR_LOADFROMFILE = 16
  7. Const NIF_ICON = 2
  8. Const NIF_TIP = 4
  9. Const NIM_ADD = 0
  10. Const NIM_DELETE = 2
  11. ' déclaration des variables
  12. Dim oDyn
  13. Dim hWnd, hIcon
  14. Dim dwPid, dwNotifyIconDataAddr
  15. Dim sTip, sNotifyIconData
  16. ' instanciation du Wrapper DynaWrap (version étendue)
  17. Set oDyn=CreateObject("DynamicWrapper")
  18. ' définition des API Win32 utilisées pour ce projet
  19. oDyn.Register "Shell32.dll", "Shell_NotifyIcon", "i=ll", "r=b"
  20. oDyn.Register "User32.dll", "GetDesktopWindow", "r=h"
  21. oDyn.Register "User32.dll", "LoadImage", "i=hsllll", "r=h"
  22. oDyn.Register "User32.dll", "DestroyIcon", "i=h", "r=b"
  23. oDyn.Register "Kernel32.dll", "GetCurrentProcessId", "r=l"
  24. ' détermination du Pid du processus courant
  25. ' le Pid sera l'identificateur de l'icone de la zone de notification
  26. ' cette solution permet à priori l'exécution d'instances simultanées
  27. dwPid=oDyn.GetCurrentProcessId()
  28. ' détermination du handle du bureau
  29. ' cette fenêtre recevra tous les messages de notification
  30. hWnd=oDyn.GetDesktopWindow()
  31. ' chargement de l'icone à partir du fichier NotifyIcon.ico
  32. ' le fichier icone doit se situer dans le répertoire courant
  33. hIcon=oDyn.LoadImage(VBNull, "NotifyIcon.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE)
  34. ' définition du texte de l'icone (Tip)
  35. ' ce texte s'affichera lors du survol de l'icone
  36. ' le Pid du processus courant sera également affiché
  37. sTip="Notify Icon From VBScript ! Pid:" & CStr(dwPid)
  38. ' allocation de la structure NOTIFYICONDATA
  39. ' cette structure a une taille de 88 bytes soit 44 en unicode
  40. sNotifyIconData=String(44,0)
  41. ' renseignement des valeurs de la structure
  42. ' les valeurs sont injectées dans le buffer à l'offset spécifié
  43. dwNotifyIconDataAddr=oDyn.GetBSTRAddr(sNotifyIconData)
  44. oDyn.SetMemInBSTRAddr dwNotifyIconDataAddr, 0,  DW_LONG, 88 ' .cbSize
  45. oDyn.SetMemInBSTRAddr dwNotifyIconDataAddr, 4,  DW_LONG, hWnd ' .hWnd
  46. oDyn.SetMemInBSTRAddr dwNotifyIconDataAddr, 8,  DW_LONG, dwPid ' .uID
  47. oDyn.SetMemInBSTRAddr dwNotifyIconDataAddr, 12, DW_LONG, NIF_ICON Or NIF_TIP ' .uFlags
  48. oDyn.SetMemInBSTRAddr dwNotifyIconDataAddr, 20, DW_LONG, hIcon ' .hIcon
  49. oDyn.SetMemInBSTRAddr dwNotifyIconDataAddr, 24, DW_BSTR, sTip ' .szTip
  50. ' affichage de l'icone dans la zone de notification
  51. oDyn.Shell_NotifyIcon NIM_ADD, dwNotifyIconDataAddr
  52. ' simulation du traitement
  53. ' on se contente ici d'afficher une boite de dialogue
  54. ' le Pid du processus courant est affiché dans le titre
  55. MsgBox "Processing, please wait !", 0, sTip
  56. ' traitement terminé
  57. ' suppression de l'icone de la zone de notification
  58. oDyn.Shell_NotifyIcon NIM_DELETE, dwNotifyIconDataAddr
  59. ' libération des ressources utilisées
  60. oDyn.DestroyIcon(hIcon)

Téléchargement:
Guide PDF: -
Archive: NotifyIcon.zip

 
Suivant >