SAVOIR À QUEL PROGRAMME APPARTIENT UNE ICONE DE LA ZONE DE NOTIFICATION ("TRAY")
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
25 juil. 2004 à 21:05
nico69960
Messages postés1Date d'inscriptiondimanche 28 septembre 2003StatutMembreDerniè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.
nico69960
Messages postés1Date d'inscriptiondimanche 28 septembre 2003StatutMembreDerniè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és190Date d'inscriptiondimanche 17 avril 2005StatutMembreDernière intervention18 mars 2009 30 oct. 2007 à 18:10
excellent
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 3 déc. 2004 à 10:01
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és2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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és539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 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és2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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és539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 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és2Date d'inscriptionmardi 18 février 2003StatutMembreDerniè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és2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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és2Date d'inscriptionmardi 18 février 2003StatutMembreDerniè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és2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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és1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 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..
2 mars 2010 à 22:09
30 oct. 2007 à 18:10
3 déc. 2004 à 10:01
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...
2 déc. 2004 à 21:34
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
2 déc. 2004 à 13:25
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
1 déc. 2004 à 19:30
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
1 déc. 2004 à 18:39
pourrai tu m'expliquer
7 oct. 2004 à 13:01
JMP
1 oct. 2004 à 16:26
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
1 oct. 2004 à 06:18
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 !
26 juil. 2004 à 10:20
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
25 juil. 2004 à 21:05
Voila
++