begin process at 2012 05 30 15:46:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

retirer l'icone systray d'une app externe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

retirer l'icone systray d'une app externe

jeudi 29 juillet 2004 à 16:51:09 | retirer l'icone systray d'une app externe

devloop2

Bonjour à tous !
(c'est mon premier post ici ;) )
d'abord j'espère ne pas me tromper de section...

Voilà j'utilise un logiciel qui met son icone dans la zone de notification (systray) près de l'horloge et j'aimerais faire une petite appli qui puisse la cacher (l'icone) quand je le souhaite.

Le logiciel fonctionne avec une fenêtre (invisible toutefois) donc l'utilisation de FindWindow est possible pour récupérer un handle sur cette fenêtre.
Logiquement il suffit ensuite d'envoyer un message à cette fenêtre en utilisant Shell_NotifyIcon.

Le problème c'est qu'il faut passer les bons paramêtres à cette fonction, surtout la structure de l'icone.
J'ai lu dans la doc MSDN que l'uID de l'icone et le handle de la fenêtre devrait suffire...
Pour le handle on l'a grâce à FindWindow...

Pour l'ID ça se complique...
Je débute en visual c++ mais je me suis dit que je pourrais trouver cet ID avec ResourceHacker. Après avoir comparé des sources avec les résultats de RH je pense que l'ID de mon icone est 150 (IconGroup dans RH...)

donc j'envoie mon Shell_NotifyIcon à la fenêtre de mon soft et évidemment il se passe rien (ben fallait pas réver non plus :D )

enfin tout ça pour dire que je bloque...
si vous avez des idées pour faire disparaître cette icone de mon systray merci de me les soumettre :)

ps: j'espère avoir été clair (gnè !?) j'en ai mal à la tête :(
mercredi 25 août 2004 à 12:10:08 | Re : retirer l'icone systray d'une app externe

Pamaury

je suis en train d'essayer une méthode(mais j'ai quelque pb encore) qui consiste à récupérer le HWND du systray puis à en énumérer les boutons puis à en obtenir les info mais à chaque fois que je veux obtenir les info, la sys tray bug et plante donc pour l'instant c'est pasq encore çà mais je cherche ...
mercredi 25 août 2004 à 21:39:29 | Re : retirer l'icone systray d'une app externe

youpiyoyo

je suis intéressé par ton post car moi aussi je cherche a faire cela..

je m'étais deja penché sur la question , sans trouver encore la solution. en regardant dans spy++ il y a rien de significatif et de commun pour tous les ico des sys tray.

jette un oiel sur ma source HIDE ET UNHIDE A PROGRAMME+ SYSTEM TRAY AUX CHOIX!!!!, il y a une bonne énumération des class filles et parents d'un prog, genre bouton, list view, et ico sys tray,... mais j'ai rien trouvé pour identifé kom élément pour l'ico du systray.
youpi :)
mercredi 25 août 2004 à 23:27:25 | Re : retirer l'icone systray d'une app externe

Pamaury

Bon je poste l'état de ma source:

void TestSysTrayCommand()
{
HWND hwnd=FindWindow("Shell_TrayWnd","");
if(hwnd==NULL)
{
std::cout<<"Cannot find the Shell_TrayWnd !\n";
}
else
{
std::cout<<"Shell_TrayWnd finded!\n";
HWND hwnd2=FindWindowEx(hwnd,NULL,"TrayNotifyWnd","");
if(hwnd2==NULL)
{
std::cout<<"Cannot find the TrayNotifyWnd !\n";
}
else
{
std::cout<<"TrayNotifyWnd finded!\n";
HWND hwnd3=FindWindowEx(hwnd2,NULL,"SysPager","");
if(hwnd3==NULL)
{
std::cout<<"Cannot find the SysPager !\n";
}
else
{
std::cout<<"SysPager finded!\n";
HWND hwnd4=FindWindowEx(hwnd3,NULL,"ToolbarWindow32",NULL);
if(hwnd4==NULL)
{
std::cout<<"Cannot find the ToolbarWindow32 !\n";
}
else
{
LRESULT numberButtons=SendMessage(hwnd4,TB_BUTTONCOUNT,0,0);

std::cout<<"ToolbarWindow32 finded!\n";
std::cout<<"Shell_TrayWnd/TrayNotifyWnd/SysPager/ToolbarWindow32>\n";
std::cout<<"+-Number of buttons:"<<numberButtons<<"\n";

for(int i=0;i<numberButtons;i++)
{
std::cout<<" +-Button_"<<i<<"\n";
//std::cout<<" +-text:\""<<str<<"\"\n";
}

HWND tooltip=(HWND)SendMessage(hwnd4,TB_GETTOOLTIPS,0,0);
if(tooltip==NULL)
{
std::cout<<"TB_GETTOOLTIPS failed: no tooltip associated\n";
}
else
{
LRESULT toolNumber=SendMessage(tooltip,TTM_GETTOOLCOUNT,0,0);
std::cout<<"+-tooltip:\n";
std::cout<<" +-tool number:"<<toolNumber<<"\n";

for(int i=0;i<toolNumber;i++)
{
TOOLINFO ti;
ti.cbSize=sizeof(TOOLINFO);
if(!SendMessage(tooltip,TTM_ENUMTOOLS,i,(LPARAM)(LPTOOLINFO)&ti))
{
std::cout<<"TTM_ENUMTOOLS failed for i="<<i<<"\n";
}
else
{
std::cout<<" +-tool_"<<i<<":\n";
std::cout<<" +-ID:"<<ti.uId<<"\n";
std::cout<<" +-rect:{"<<ti.rect.left<<","<<ti.rect.top<<","<<ti.rect.right
<<","<<ti.rect.bottom<<"}\n";
std::cout<<" +-text:"<<ti.lpszText<<"\n";
}
}
}
}
}
}
}

std::cin.get();
}

Le problème c'est que l'appel suivant:

SendMessage(tooltip,TTM_ENUMTOOLS,i,(LPARAM)(LPTOOLINFO)&ti);

Fais bugger la systrayne idée ?
jeudi 26 août 2004 à 21:54:40 | Re : retirer l'icone systray d'une app externe

youpiyoyo

alors fodrai ke je m'y repenche et c du temps vu ke je pars dem'1 prendre mes vacances, j'aurai pas le temps, donc c un post ke je vais suivre dans le temps....

je vais copier ton code et faire des tests et mixer avec une source ke j'avais précisé plus haut.

fais chier car j'ai pas spy++ d'installé,j'aurai bien fais une verif maintenant, mais je suis entrain de regarder ton code et a mon avis tu est pas loin de la solution,

il y a kan meme un truc ki m'interpel:

d'apres ce ke je comprend de ton code
"Shell_TrayWnd" serait donc le nom de la class du system tray???

et tu enumeres toutes les balloons ou tooltips, ke tu veux faire correspondre a celui du prog désiré...

si j'ai bien compris ce ke tu as codé est ce ke tu recherches, cela ne serait pas plus simple d'énuméré toutes les classes de ton prog choisi, et de voir s'il partie de "Shell_TrayWnd"??? (parent)

enfin c com ca ke je le vois mais si j'ai pas bien compris ton code, pourais tu me l'expliké!! merci @+

youpi :)
jeudi 26 août 2004 à 23:32:41 | Re : retirer l'icone systray d'une app externe

Pamaury

non ce serai trop beau en fait mon récupère un handle sur la systray(de classe "ToolbarWindow32 " mais en fait voilà l'arborescence:
+-Shell_TrayWnd
+-Shell_TrayWnd
+-SysPager
+-ToolbarWindow32 (ce qui nous interesse)
Une fois que j'ai ce handle, je lui demande de me donner un handle sur le tooltip puis je demande au tooltip de m'énumérer tous les message enregistré et c'est là que çà bug
vendredi 27 août 2004 à 12:48:33 | Re : retirer l'icone systray d'une app externe

youpiyoyo

ok,je comprend ce ke tu veux faire mais a mon avis c pas com ca k'il fo si prendre... a mon humble avis :)

je te conseil de voir ma source "HIDE ET UNHIDE A PROGRAMME+ SYSTEM TRAY AUX CHOIX!!!!",

il y a certainement des trucs ki peut te faire avancé notament l'enumération des filles et parents d'un élément, class, hwnd etc...

mon prog est fais a la base kom le spy++, tu click avec le pointeur une fenetre et elle le met dans le sys tray.... genre outlook etc...

en fait je suis arriver a un probleme kan tu click sur un bouton ou une list view, enfin bref un element d'un prog cela merdé car cela recupéré le hwnd du bouton,etc...
j'ai donc fais une énumération des classes appartenant à l'objet clické pour recup le parent et z-top level des windows....

bref avec un iswindow je test si c la fenetre....

tout ca pour en venir au faite ke dans mon énumération j'ai a l'intérieur de mon énumération une class appartenant et dépendant au systray... (fait un messagebox pour verif tu vera)

ce ke je savais pas a l'époke c ce ke tu viens de m'apprendre c ca:
"+-Shell_TrayWnd
+-Shell_TrayWnd
+-SysPager
+-ToolbarWindow32 (ce qui nous interesse)
"
a l'époke je n'avais pas trouvé de correspondance mais , desouvenir il me semble k'en explorant avec spy++, le type systray varie en fonction des prog et de celui ki l'a programmé

enfin bref, je pense k'il fodrai ke tu jette un oeil a ma source peut etre ke ca va t'aidé, moi je m'y penche dans 1 emaine car je pars en vacance dans 2 h et je ne pourai pas te répondre d'ici la...

@+
youpi :)
vendredi 10 septembre 2004 à 16:18:42 | Re : retirer l'icone systray d'une app externe

devloop2

lut !
désolé pour cette réponse tardive
merci pour votre aide à tous les deux... je vais étudier ça
+
vendredi 10 septembre 2004 à 18:50:16 | Re : retirer l'icone systray d'une app externe

Pamaury

A mon avis le pb est que le pointeur retourné dans mon prog n'est valable que dans le processus du sys tray et pas dans celui où j'appel .
jeudi 2 décembre 2004 à 15:29:25 | Re : retirer l'icone systray d'une app externe

youpiyoyo

ecoute j'ai avancer dans ce domaineva voir la source de "VB"
ki est po mal http://www.cppfrance.com/code.aspx?ID=24855

ainsi ke la mienne plus graphike: http://www.cppfrance.com/code.aspx?ID=27923

bientot j'integrerai tout dans mon tray manager donc jetter un coup d'oel dans les prochains jours
youpi :)

1 2

Cette discussion est classée dans : icone, handle, id, fenêtre, systray


Répondre à ce message

Sujets en rapport avec ce message

Icone et Dialogue [ par sebastienbro ] Bonjour,J'ai un dialogue que j'affiche grâce a CreateDialog. Jusque là aucun problème.Seulement, j'ai mis une image, et je voudrai insérer dans mon im changer l'icone d'un programme compiler [ par Mike ] Salut, je bosse ss visual C++ en win32, j'aimerais savoir comment changer l'icone d'un programme compiler, sachant que je fé un MAKEINRESSOURCE(ID_ICO Récupération d'ID de fenêtre enfant [ par amauro ] Bonjour à tous!Comment fait-on pour récupérer l'ID de la fenêtre enfant dans le cas d'une application MDI?Merci d'avance de votre réponse. Processus & Handle [ par ro0tsman ] Bonjour all,je voudrai savoir s'il est possible de trouver le handle d'une fenêtre à partir de son processus (id) ?Sinon de manière générale, comment ressources, aide pour menu pour icone dans la systray [ par leprov ] salut a tous.voila j'aimerais savoir si avec l'editeur de ressources de visual c++, il est possible de faire changer un titre dans le menu qu'on crée Récuperer le Handle d'une icone (VC++)? [ par Frenchy62620 ] J'ai une icone crée dans mon projet (visual C++) (.rc)je veux mettre cette icone sur plusieurs boutons créé dynamiquement par CreateWindow("button". "Petit" problemme de HANDLE [ par Jab_834 ] Bonjour a tous !Alor voilà mon probleme, j'ai dans mon application , écrit une fonction permettant de lancer un autre programme externe, que je n'ai p ICON buton [ par abdoulax ] Encore une question, Je voudrai insérer une icone dans un bouton voici ce que g trouvé : SendMessage(HWND,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM)hand Handle de listbox avec C++Builder [ par laurentl2000 ] J'ai créé une listbox dans une form avec C++Builder. Comment faire pour trouver le handle de la listbox ?Si son ID était fixe, je pourrais faire ceci Fenêtre bureau et format icone [ par plom ] Bonjour Je souhaiterai réaliser une petite appli. J'aimerai faire un genre de menu démarrer mais sur le bureau.La fenêtre de l'appli devra être qqchos


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 10,140 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales