Retirer icone taskbar

Résolu
Signaler
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Voila mon probleme!
Je cherche à supprimer des icones de la taskbar, mais il me manque un parametre
Voici la boucle de suppression:

HWND hIcon;
NOTIFYICONDATA icon;


if (NULL (hIcon FindWindow("Recept_Tel", NULL)))
break;
icon.cbSize = sizeof(NOTIFYICONDATA);
icon.hWnd = hIcon;
icon.uID = 101; //Le probleme est ici
Shell_NotifyIcon(NIM_DELETE, &icon);
Le probleme est a la ligne icon.uID;
Si l'icone que je veux supprimer est l'icone d'un des programmes que j'ai fait, aucun probleme, je connais son identifiant, mais si l'icone à supprimer est a un autre programme que j'ai installé, comment dois-je faire pour recuperer l'identifiant de l'icone?
Merci de votre aide
PS:je travaille uniquement en C, sans les MFC!

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]

2 réponses

Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

J'ai bien peur que ce soit plus compliqué que cela...
Si tu regardes bien MSDN : (au paramètre uID de NOTIFYICONDATA)

Application-defined identifier of the taskbar icon. The Shell uses hWnd and uID to identify which icon to operate on when Shell_NotifyIcon is invoked. You can have multiple icons associated with a single hWnd by assigning each a different uID.

Donc l'ID n'est pas suffisant il te faut aussi le handler auquel est associé l'icone. Dans ton code tu récupères une fenêtre mais je ne sus pas convaincu que ce soit la bonne...

En supposant que ce soit la bonne (peu de chances - je le repète), tu peux toujours tenter un algo type force brute : tu essaies tous les ID. Avec un code du style:

const int MAX_ID = 99999;
for (icon.uID=0; icon.uID<MAX_ID; icon.uID++)
{
if ( Shell_NotifyIcon(NIM_DELETE, &icon) )
{
printf( "L'ID vaut %d\n", icon.uID );
break;
}
}
if ( icon.uID>MAX_ID )
printf( "ID non-trouvé\n" );

Et si ça marche tu auras l'ID donc plus besoin de te retaper la boucle à chaque fois.

Bon courage

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
Pour ce qui est du handle, pas de probleme, c'est le bon!
Le seul souci vec le handle, c'est si plusieurs fenetres ont le même classname, auquel cas, il faut les différencier avec le second parametre de FindWindow
Sinon, merci pour l'idée de scanner tous les identifiants, c'est vrai qu'une fois cela fait, plus besoin de le repeter!
Merci bien

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]