Message d'une icône dans le systray

Résolu
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 26 oct. 2004 à 14:01
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 27 oct. 2004 à 22:02
Comment faire pour afficher un espèce de popup (qui ressemble à une bulle) qui part d'une icône du systray (à côté de l'horloge windows pour ceux qui connaissent pas) ?

Miranda IM le fait par exemple avec le plugin de yahoo et d'irc (mais je n'ai rien trouvé dans le code source), ou bien windows (ex : cable réseau désactivé, pas assez de place sur le disque dur, nouveau matériel détecté, visite guidée d'xp, etc)
AVG dit aussi base de données des virus expirées comme ça il me semble

Je n'ai rien trouvé dans le msdn

CyberP,
Celui qui dit que toute question a une réponse

19 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 oct. 2004 à 18:05
oups, c plutot avec style TTS_BALLOON...dsl

++
3
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
27 oct. 2004 à 08:23
En fait il me manquait juste un petit
#define _WIN32_IE 0x0500

CyberP,
Celui qui dit que toute question a une réponse
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 oct. 2004 à 17:59
tooltip avec flag NIF_INFO.
Plus d'infos sur MSDN, cherche tooltip.

++
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
26 oct. 2004 à 18:39
Juste un petit problème :

d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(46) : error C2039: 'uVersion' : is not a member of '_NOTIFYICONDATAA'
d:\Tout\Programmes\Visual Studio\Vc7\PlatformSDK\Include\ShellAPI.h(539) : see declaration of '_NOTIFYICONDATAA'
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(46) : error C2065: 'NOTIFYICON_VERSION' : undeclared identifier
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(48) : error C2039: 'szInfo' : is not a member of '_NOTIFYICONDATAA'
d:\Tout\Programmes\Visual Studio\Vc7\PlatformSDK\Include\ShellAPI.h(539) : see declaration of '_NOTIFYICONDATAA'
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(49) : error C2039: 'uTimeout' : is not a member of '_NOTIFYICONDATAA'
d:\Tout\Programmes\Visual Studio\Vc7\PlatformSDK\Include\ShellAPI.h(539) : see declaration of '_NOTIFYICONDATAA'
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(50) : error C2065: 'NIF_INFO' : undeclared identifier
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(56) : error C3861: 'NIF_INFO': identifier not found, even with argument-dependent lookup
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(57) : error C2039: 'szInfo' : is not a member of '_NOTIFYICONDATAA'
d:\Tout\Programmes\Visual Studio\Vc7\PlatformSDK\Include\ShellAPI.h(539) : see declaration of '_NOTIFYICONDATAA'
d:\Tout\Projets\C++\SC Server\SCServer\SCServer.cpp(58) : error C2039: 'uTimeout' : is not a member of '_NOTIFYICONDATAA'
d:\Tout\Programmes\Visual Studio\Vc7\PlatformSDK\Include\ShellAPI.h(539) : see declaration of '_NOTIFYICONDATAA'

en bref il trouve pas tout ce dont j'ai besoin pour ça malgré le fait que j'aie inclus shellapi.h et que les bonnes variables sont bien définies dedans

CyberP,
Celui qui dit que toute question a une réponse
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 oct. 2004 à 18:44
#include <commctrl.h>

#pragma comment(lib, "comctl32.lib")

Sans oublier InitCommonControls() au debut du prog...

++
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
26 oct. 2004 à 21:35
Ca ne fonctionne toujours pas (c'est très bizarre et c'est pour cela que j'ai posé la question sur le forum)

CyberP,
Celui qui dit que toute question a une réponse
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 oct. 2004 à 22:08
Montre le code stp
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
26 oct. 2004 à 22:16
systray.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP|NIF_INFO;
strcpy(systray.szInfo, text);
systray.uTimeout = 15000;
Shell_NotifyIcon(NIM_MODIFY, &systray);

Mais c'est la même erreur que si on utilisait MessageBox sans inclure windows.h par exemple

CyberP,
Celui qui dit que toute question a une réponse
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 oct. 2004 à 22:27
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 oct. 2004 à 15:35
Salut,
Un petit message juste pour embeter AlexMAN sur un point:

"Sans oublier InitCommonControls() au debut du prog..."
si tu le met a la fin du prog, ca marche pas ?
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
27 oct. 2004 à 15:44
Je parle de "debut de prog" lors de l'execution, pas lors de l'ecriture...
c pour ca ke tu m'embetes aardman ? ;)=

Sinon, en prenant au pied de la lettre ta remark, ca m'etonnerait ke ca marche (InitCommonControls() sert a charger les dll necessaires c ca ??).
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 oct. 2004 à 15:57
Salut,
Ma remarque était bien a prendre au pied de la lettre.

ps: j'aime bien avoir l'air mysterieux comme ca
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
27 oct. 2004 à 16:07
et donc ?
Tu connais la reponse ou tu me demandais de te repondre (haha !) ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 oct. 2004 à 16:22
Salut,
InitCommonControls est une fonction qui ne fait rien, elle sert juste a ajouter une dependance a comctrl32.dll dans le programme. C'est pour ca que tu peux l'appeler a la func du prog.

Lorsque l'exe se charge en mémoire, le loader va trouver cette dépendance, et donc charger comctrl32.dll...
Sans appel a InitCommonControls, pas de dependance, et sans dependance, pas de chargement... et donc risque de gros problemes.

D'ailleur, tu peux ne pas appeler InitCommonControls() du tout, si tu charges la dll dynamiquement au debut du prog avec LoadLibrary("comctl32.dll");

voila, c'etait juste pour t'embeter hein.
j'avais prévenu.
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
27 oct. 2004 à 16:27
Ah mais pour m'apprendre des trucs, tu peux m'embeter autant ke tu veux ;)
Kan tu dis 'ajouter une dependance', tu veux dire ke la dll est 'chargé avec le prog' ? nan ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 oct. 2004 à 21:13
Salut,
Si un exe utilise une fonction d'une dll, le loader va automatiquement charger cette dll lors du chargement du programme.

Si tu regardes les dependances d'un exe qui utilise les common controls, tu verra qu'il n'y en a qu'une (c'est InitCommonControls()).
Si tu enleve l'appel a InitCommonControls(), l'exe n'a plus aucune dépendance sur comctrl32, du coup le loader ne risque pas de le charger, et c'est ca qui risque poser probleme...

Donc en gros, InitCommonControls() sert juste a créer une dependance sur comctrl32.dll, pour etre bien sur que comctrl32.dll soit bien chargée au debut de l'execution du programme.

Je sais pas si c'est bien clair, mais j'espere que tu as saisi l'idée générale..
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
27 oct. 2004 à 21:32
-Ok chef. Je viens de tester ce que tu me dis (je suis vachement curieux), et jviens de m'apercevoir que si jenleve InitCommonControls(), plus aucune dependance a comctl32.dll !
Donc en fait, si je comprends bien, InitCommonControls() n'est pas vraiment une 'fonction', elle est plutot interprété par le compilo (ou le le linker, je sais pas), nan ?

-Je viens de desassembler le prog de test, et l'appel est bien present, mais alors je ne comprend pas comment elle fonctionne...

-Je viens remplacer l'appel a la fonction par des nop, ca fonctionne...Donc comment fonctionne cette fonction ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 oct. 2004 à 21:40
Salut,
J'avais lu sur un site (celui avec les tuto en asm win32) que cette fonction n'etait composée que d'une instruction: ret.

L'equivalent en C ca serait donc (a mon avis):
int InitCommonControls(void)
{
return 1;
}
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
27 oct. 2004 à 22:02
" Cette fonction ne fait RIEN! Sa seule et unique instruction est "ret". Son seul but c'est d'inclure la référence de comctl32.dll dans la section d'importation pour que le Loader PE le charge à chaque fois que le programme est chargé. Le vrai boulot se fait au niveau de l'entrypoint de la fonction DLL qui enregistre toutes les classes de contrôles communs (common control classes) quand le dll est chargé"..

Bah uè, t'avais raison, il est mm dit qu'on peut la mettre n'importe ou ds le code.
Donc tu avais raison aardman, merci ;)

++
0
Rejoignez-nous