SAVOIR À QUEL PROGRAMME APPARTIENT UNE ICONE DE LA ZONE DE NOTIFICATION ("TRAY")

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 25 juil. 2004 à 21:05
nico69960 Messages postés 1 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 2 mars 2010 - 2 mars 2010 à 22:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24855-savoir-a-quel-programme-appartient-une-icone-de-la-zone-de-notification-tray-et-lister-les-icones

nico69960 Messages postés 1 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 2 mars 2010
2 mars 2010 à 22:09
Salut, et beau boulot. Je suis en train de réaliser une fonction un peu similaire a la tienne pour l'intégrer dans un programme, mais mon résultat est que TBBUTTON me retourne rien (toute les variables sont a zéro), je pensais que sa venais de mon programme mais en fait avec ta source donne le même résultat. Y a t-il quelque chose qui a changé au niveau du SendMessage 'TB_GETBUTTON' sur windows 7 ?
unionx Messages postés 190 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 18 mars 2009
30 oct. 2007 à 18:10
excellent
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
3 déc. 2004 à 10:01
ok j'ai compris merci pour ton explication

regarde une des sources ke j'ai creer ki utilise comme base ta source (j'espere ke tu m'en voudra po...)
http://www.cppfrance.com/code.aspx?ID=27923

di moi ce ke tu en penses....

j'ai rencontrais kelkes problemes
car parfois il y a po d'icone genre msn messenger, ou nvidia parameter,etc...
je sais po pourkoi ca contient po d'ico donc j'ai remplacer par l'ico du prog...
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
2 déc. 2004 à 21:34
salut

on en peut pas accéder à un imagelist d'un autre processus : un imagelist, c'est une zone mémoire pas un thread de fenêtre, donc tu ne peux pas lui envoyer de message...obtenir le handle de l'imagelist ne sert pas vraiment...

pour le hIcon : c'est le handle de l'icone et pas de l'imagelist : ce HICON (et pas HIMAGELIST) est un handle d'icone valide dans tous les processus du système (puis que pointant vers une zone > 0x80000000). Quand je récupère les infos sur un bouton dans un TBBUTTON avec TB_GETBUTTON le membre dwData est un pointeur vers la structure citée précédement (dans le processus Explorer.exe): et le membre hIcon est donc à 20 octets du début de la zone pointée par dwData. Il faut donc utiliser ReadProcessMemory pour lire la zone pointée par dwData dans Explorer.exe... Après tu peut utiliser ce HICON avec DrawIcon...

Je ne sais plus dans quel ordre j'ai fait la source C et la source VB mais de toute façon c'est la même méthode...

Bonne Prog

ShareVB
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
2 déc. 2004 à 13:25
ok je te trouve pas tres clairs a ce nivo, cad ke ton hicon se rempli abec dwData kan tu li avec ton ReadProcessMemory bon pourkoi po ... j'arrive po a capter kan meme mais bon...

il y aurait po moyen de faire ca

himl2=(HIMAGELIST)SendMessage(GethWndTray(),TB_GETIMAGELIST,0,0); pour recup l'image list des boutton... c ce ke je suis entrain de faire..... di moi ce ke tu en penses..

sinon j'ai oublier de te feliciter, et d'une je te trouve clair dans ta facon de coder (tu mets po mal d'explication c ki est rare), , et ke d'autre part tu t gavé sur ce petit prog.... bien ke j'ai l'impression k'il soit adapter d'un VB ....

ciao
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
1 déc. 2004 à 19:30
salut

en fait, dans la toolbar du systray, dwData de chaque icone (bouton) pointe vers une structure :
typedef struct tagIconInfo {
HWND hwnd; //handle de la fenêtre
UINT uID; //id de l//icone
UINT uCallbackMessage; //message envoyé à la fenêtre
DWORD Unknown1[2]; //interprétation inconnue
HICON hIcon; //handle de l//icone affichée
DWORD Unknown2[3]; //interprétation inconnue
} IconInfo, lpIconInfo; // soit 36 octets

je lis donc dans la mémoire de explorer.exe à l'endroit pointé par dwData les 36 octets (dans le début de pTray qui contient les membres de la structure ci dessus)

et après, on peut s'en servir vu que ces icones sont globales au système...

Bonne Prog

ShareVB
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
1 déc. 2004 à 18:39
j'arrive pas a comprendre commen tu rempli ton HICON hIcon de ton tagTRAY
pourrai tu m'expliquer
jmpierrard Messages postés 2 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 7 octobre 2004
7 oct. 2004 à 13:01
Juste une confirmation : sous NT4, c'est bien comme sous Windows 95, avec cette seule différence, comme tu le signales dans ton code, l'utilisation d'une structure NOTIFYICONDATAW au lieu de NOTIFYICONDATAA.

JMP
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
1 oct. 2004 à 16:26
salut

en fait, il m'a fallut un bon déboggueur pour scrupter la mémoire de la toolbar du tray...j'ai fait mes analyses...
entièrement pour XP...et en ayant pas mal cherché sur 98 ( et n'ayant pas trouvé grand chose...), j'ai cherché sur internet pendant au moins deux heures, et je suis tombé par hasard sur un page qui parlait de ca (le prb c que je n'ai plus l'adresse) avec une méthode de hook et surtout quelques détails sur l'endroit ou trouver les infos sur le icones dans le tray... de là, j'ai repris mon debugger et j'ai repris l'analyse pour essayer de trouver une signification aux champs inconnus...

donc il y a une grande part d'analyse pour XP et une aide précieuse de cette page pour le autres OS (que je n'arrive pas à retrouver...sur mon disque en fouilli lol...)

ShareVB
jmpierrard Messages postés 2 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 7 octobre 2004
1 oct. 2004 à 06:18
Bonjour ShareVB,
c'est la première fois que je rencontre un programme capable d'énumérer le contenu des icônes du tray : c'est épatant !
Les méthodes utilisées ne semblent pas documentées par Microsoft : je me trompe ? Sinon, est-il indiscret de te demander où tu les as trouvées ?
Merci en tout cas pour ce travail, qui va bien m'aider !
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
26 juil. 2004 à 10:20
salut

non justement c bien des if qu'il faut car fsState n'est pas un enum mais une combinaison de un ou plusieurs TBSTATE_

ShareVB
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
25 juil. 2004 à 21:05
ton prog est bien, un truc par contre : ds la derniere fonction, remplace tout tes if par des else if, bocou mieu nivo perf..

Voila

++