Retirer icone taskbar

Résolu
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 23 janv. 2005 à 00:55
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 23 janv. 2005 à 13:01
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

garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
23 janv. 2005 à 11:27
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
3
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
23 janv. 2005 à 13:01
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]
0
Rejoignez-nous