Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SAVOIR À QUEL PROGRAMME APPARTIENT UNE ICONE DE LA ZONE DE NOTIFICATION ("TRAY") ET LISTER LES ICONES


Information sur la source

Catégorie :Système Source .NET ( DotNet ) Classé sous : tray, systray, icône, barredestâches, notification Niveau : Expert Date de création : 26/02/2006 Date de mise à jour : 14/01/2008 22:56:47 Vu / téléchargé: 8 536 / 707

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


Description

Ce code permet de lister les icones du "Tray" à côté de l'horloge et de savoir à quel programme une icone appartient...

Pour ME/2000/XP :
C'est une interprétation des données systèmes de cette barre d'outils (le Tray a la classe "ToolbarWindow32") que l'on peut obtenir avec le message TB_GETBUTTON...

Pour 9x/NT :
C'est une interprétation de la structure pointée par le pointeur (lol) que l'on obtient avec GetWindowLong(index=0)

Ce code doit fonctionner sous 9x/ME/NT/2000/XP... Il a été testé sous 98/NT4/2000/2003/XP/Vista...

sous 9x, la dll jointe dans le zip est nécessaire pour transférer l'ImageList du Tray dans notre processus...
 

Conclusion

Ce code fonctionne même lorsque l'option "Masquer les icones inactives" est activée (XP)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

26 février 2006 23:06:26 :
oubli d'une dll
30 décembre 2007 21:26:43 :
Mise en forme "objet" du code
14 janvier 2008 22:56:49 :
correction du fichier projet correction d'une fuite mémoire de lecture des icônes

Commentaires et avis

signaler à un administrateur
Commentaire de eldim le 27/02/2006 10:27:10

Excellent et très util

signaler à un administrateur
Commentaire de Gammacronosios le 21/02/2007 12:05:13

Olalalalalalala ! Ca fait des années que je cherche ça !
1) Tu es balaise
2) Tu es balaise
3) Merci beaucoup !
4) 10/10 !!!!
5) Excelent !

signaler à un administrateur
Commentaire de djihell le 26/07/2007 10:13:31

Salut à tous et bravo pour ce chti prg
mais comme je suis débutant en VB NET, j'ai oune grosse problème.
J'ai générer la solution, placer mon .EXE et ses DLL dans un autre PC qui n'a pas VB Net
Et là Ho malheur !!! message d'erreur : une exception non gérée s'est produite et bla bla bla etc...
je n'arrive pas à le faire fonctionner.
Est-ce quelqu'un pourrait m'aider SVP .. OS Court !!!
Merci :) Dji-Hell

signaler à un administrateur
Commentaire de ShareVB le 26/07/2007 22:46:16

salut,

d'abord as-tu installé le framework 2.0 (et/ou 1.1, je me souviens plus avec quelle version j'ai compilé)

ensuite, le "bla bla bla" c'est le plus intéressant (en message privé)...

ShareVB

signaler à un administrateur
Commentaire de werdDomain le 22/12/2007 08:54:02 10/10

EXCELENT! WOW sa marche #1 sur xp :) (10/10)
juste un petit comm... en fesans la conversion en vb.net (8) 2 erreur de type... (explicit option on) le cast de shotr a integer n'est pas permi. utilisez ctype(Integer, Short) :
Dans modSystray_9x.vb:
remplacer : (line 118)
    If (ReadProcessMemory(hP, lpData, temp(0), dwCount * 4, 0)) Then

par:
    If (ReadProcessMemory(hP, lpData, CType(temp(0), Short), dwCount * 4, 0)) Then

ET

remplacer : (line 250)
    ReadProcessMemory(hProc, New IntPtr(tbut.dwData), Icons(x).hwnd, 36, ret)

par:
    ReadProcessMemory(hProc, New IntPtr(tbut.dwData), CType(Icons(x).hwnd, Short), 36, ret)

apart de sa super le code! :) jai rien a dire, de mon coter je vais eseyer de trouver commen avec SendMessage sender un double click a l'icone :D

MERCI ENCORE! :D

signaler à un administrateur
Commentaire de ShareVB le 22/12/2007 12:33:03

salut tout le monde,

Voici le lien vers la version VB6 : http://www.vbfrance.com/code.aspx?ID=24852

ShareVB

signaler à un administrateur
Commentaire de werdDomain le 23/12/2007 04:05:00

un autre petit comm... quand on Refresh souvent sa plante et on doit redemarer pour pouvoir l'utiliser encore... il n'y aurais pas un moyen de verifier sa? ( je fait une copy de la bare des tache, donc je doit L'Actualiser toutes les 3000 Ms
(c'est pas ma machine le probleme je vien de tout re-instaler)

signaler à un administrateur
Commentaire de werdDomain le 23/12/2007 09:43:48

bon bon une autre info de la source, est tres utile pour avoir les icones dans la bare des tache... mais si vous voulez avoir les modification vou devez re-demender la liste a chaque fois... mais avec la meime reference memoir(dans le boutton) allors vous devez garder ses valeurs en en les declarent dans le form ou le module ... allor dans la function GetTrayIcons_2KLater, qui ce trouve dans modListTray.vb

Dim hProc As Integer 'handle de Explorer.exe
    Dim hTray As Integer 'hWnd du tray
    Dim pid As Integer 'identifiant de Explorer.exe
    Dim ptrVM As IntPtr 'pointeur vers la zone mémoire pour TBBUTTON
    Dim ret As Integer 'valeur de retour
    Dim ptrTip As IntPtr 'pointeur vers une chaîne Unicode (Tip ou Path)
    Dim tbut As TBBUTTON 'les infos sur le bouton
    Dim TChar As Short 'contient un caractère unicode
    Dim x As Integer 'compteur
    Dim nIcons As Integer 'nombre d'icones dans le tray
    Dim Icons() As Tray 'tableau temporaire des icones dans le tray
    Dim lbut As Integer = System.Runtime.InteropServices.Marshal.SizeOf(tbut)
    Dim ptr As IntPtr 'pointeur


changer :
ptrVM = VirtualAllocEx(hProc, IntPtr.Zero, lbut, MEM_COMMIT, PAGE_READWRITE)

pour :
If ptrVM.ToInt32 = 0 Then ptrVM = VirtualAllocEx(hProc, IntPtr.Zero, lbut, MEM_COMMIT, PAGE_READWRITE)

et enlevez la section cleanup(de la function) pour l'appeler que quand vous aurez fini avec cette function, exemple dans l'evenement FormClosing

Cleanup:
        'on libère la mémoire allouée
        VirtualFreeEx(hProc, ptrVM, 0, MEM_RELEASE)
        'on ferme le handle de Explorer.exe
        CloseHandle(hProc)

Merci et bon code! :d

signaler à un administrateur
Commentaire de ShareVB le 30/12/2007 21:29:22

salut à tous,

Voici une nouvelle version plus "orientée objet" de ce code...l'ancienne version est dans trayold.NET...

Bonne année 2008

ShareVB

signaler à un administrateur
Commentaire de werdDomain le 04/01/2008 08:31:40

salut, j'obtien une erreur qui a raport a un debugage distant?il me demende l'acces au reseau, je l'autorise et il n'arive pas a ce connecter. jai du crée un nouveau project et ajouter manuelement les fichier... pourais tu verifier sa svp? :p

la nouvelle version regle-t-elle le probleme avec explorer.exe quand un grand nombre de "refresh" est effectuer (ex.:2 fois par secondes, pendant 6 heurs et les fenetres contenue dans le procesus explorer.exe sont affecter par je ne sait koi mais ce n'est pas normale :p)



signaler à un administrateur
Commentaire de werdDomain le 04/01/2008 12:40:09

finalement jai re-fait le test et la nouvelle version fait encore buger explorer quand on "refresh" la liste a plusieur reprise...

premierement jai ue une erreur "NullReferenceException" dans
la function HICON2StdPicture(ByVal hIcon As IntPtr) --> la valeur de
hIcon etais 0 c'est a dire invalide ... (je crois que une erreur dans  
explorer lui-meme en est la cause, il n'y aurais pas une façon
asynchrone(asynchronous) plus sur?)

*Le probleme persite apres la premiere erreur jusqu'a ce-que l'on quite
  windows ou redémarrer explorer.exe (kill+run). Meime si on Redemare  
  l'application en question, la meime erreur continue d'etre afficher.

si l'on ne redemare pas explorer, explorer ne fait pas juste "buger"
il declanche une Exception non gérée que voici:

Exception non gérée à 0x01af1000 dans explorer.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x01af1000.

j'ai ecrit tout cela car ce probleme me frène a pouvoir l'utiliser dans une bare de tâche personaliser(que jai fait pour moi) allors si tu a une idée de comment coriger ce probleme, fait moi en part ici ;-) je visite cette page tout les 2 ou 3 jours.

merci d'avance

signaler à un administrateur
Commentaire de ShareVB le 20/01/2008 11:40:55

salut à tous,

le problème de violation d'accès dans Explorer.exe venait de la libération ou non libération "abusive" des handles d'icônes dans le processus...cela devrait être corrigé...

ShareVB

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Systray Affichage d'un pourcentage d'avancement [ par thtdlx2 ] Bonjour,J'ai cherché sur le site un moyen d'afficher dans le Systray une icône représentant le pourcentage d'avancement d'une action en temps réel (mi problème de systray [ par marcod59 ] Bonjour,J'ai un programme systray qui fonctionne bien sur 2 programmes. J'ai commencé une autre application, et j'ai un problème avec ce même systray. Faire disparaitre icone du tray lorsque programme quitté [ par seozus ] Jai une application utilisant un systray icon. Mais lorsque je ferme celui ci, l'icone reste dans le systray, je dois passer ma souris par dessus pour Lancer le systray dans une application vb [ par necrodede ] SalutJe voudrai savoir comment lancer le systray dans un de mes prog Apparemment la il depend d explorer et j ai pas de control dessus je peut pas le Pb avec ShowInTaskbar [ par olive73 ] Bonjour,voila mon petit probleme.Je souhaite reduire mon appli dans le systray, sans l'afficher dans la barre des taches.Quand l'appli n'est plus redu Tray Icon de Service NT sous Terminal Server [ par rvblog ] Bonjour,quelqu'un saurait-il pourquoi :- lorsqu'un service NT (sur un Win 2003 Server), possédant sa Tray Icon, utilisant pour sa session, u Systray à plusieurs valeurs [ par Psykos7 ] Bonjour, je souhaite pouvoir afficher un pourcentage dans le systray, mais je me vois mal creer 101 images (0% à 100%)Y aurait-il un moyen d'ecri Programme systeme tray [ par jonathan_valot ] Bonjour à tous, voila je développe un programme en VB, et j'aimerai qu'il n'apparaisse que dans le système tray (les icone à droite de la barre des tâ Faire un Minizing tray [VB 6.0] [ par spike911 ] Comment je peu faire un  "minizing tray" avec un form? (Réduire un form en petit icon dans le coin droit de la bar des tâche.)Merc Créer Application qui se lance dans la zone de notification [ par AleiZ ] Bonjour,Je voudrais savoir comment je peux faire pour qu'un prog codé en VB (j'utilise Microsoft Visual Studio), se lance en minimisé dans l


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.