Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉCUPÉRER LES ICONES DU SYSTRAY DANS VOTRE PROGRAMME : OCX SYSTEM TRAY


Information sur la source

Catégorie :Système Classé sous : systray, icones, system, tray, taskbar Niveau : Expert Date de création : 20/08/2006 Date de mise à jour : 21/08/2006 13:26:40 Vu / téléchargé: 6 110 / 577

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Bonjour à tous,

Je ne lacherais rien à windows lol, je ne me sentirais bien que lorsque j'aurais réussi à récupérer toutes les infos possibles sur ce qui se passe sur mon pc ^^

Bon j'ai bien galéré pour cette source, bien que, heureusement, ShareVB avait déjà préparé tout le coté api.
cf source :
http://www.codes-sources.com/code.aspx?ID=24852

J'avais donc toutes les api et fonctions qui les utilisent, j'ai donc pas eu à beaucoup réfléchir sur les api.

Par contre j'ai galéré sur les icones, pour les stocker, voir si un icone a été modifié, voir si un icone a été créé ou supprimé etc... En essayant de faire l'ocx le + léger possible.

Donc voilà le résultat, chez moi ça marche nickel, en plus les menus marchent.. Nickel
Si vous avez des idées d'améliorations n'hésitez pas ;)

D'ailleurs si quelqu'un aurait une idée pour recevoir les événements du genre : image modifiée, ou alors ajout d'un truc etc...
mais bon ça m'étonnerait que ça soit possible, vu que ce qu'on fait dans cette source, c'est qu'on va trifouiller dans le processus explorer, à l'endroit du systray et qu'on récupère les infos en mémoire.
 

Conclusion

Bon il y a une contrainte, c'est qu'il faut se trimballer la dll de ShareVB "InterprocessImageList.dll", mais elle est très légère, c'est une dll en C donc pas besoin de l'enregistrer avec RegSvr32, donc il y a juste à la laisser dans le dossier de l'application et tout marche.


En espérant que ça vous serve, comme d'ab ;)

MadMatt
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

20 août 2006 19:15:06 :
re-téléchargement du zip
21 août 2006 13:26:40 :
re-upload du zip

Commentaires et avis

signaler à un administrateur
Commentaire de Dragonmaster le 20/08/2006 17:44:48

J'ai reçu 3 erreurs au lancement:
Vrsion 3.0 of SystrayControl.ocx is not registred. The control will be upgraded to version 5.0

Les deux autres, c'est des modules qui étaient introuvables dans un dossier 'visual basic\Récupérer Systray' (je suppose que c'est chez toi) mais je les ai ajouté et ça marche nikel.

J'ai une idée d'amélioration, la possibilité de virer une icône du systray j'ai essayé de le faire mais j'ai galéré.. Les paramètres necessaires sont: le hwnd, uID, .uCallbackMessage, .dwState

signaler à un administrateur
Commentaire de freegamer le 20/08/2006 18:24:40

Bonjour,

Je souhaiterais pouvoir rappeler les icones qui ont disparut lorsque le processus "explorer.exe" plante.

Merci de me répondre.

signaler à un administrateur
Commentaire de DARKSIDIOUS le 20/08/2006 18:45:06 administrateur CS

Et bien MadM@tt, t'es productif en ce moment ! Ca se voit que c'est les vacances ;)

Sinon, comme l'a signalé Dragonmaster, ce serait bien que tu mette SystrayControl.ocx dans ta source...

Freegamer : pose ta question plutôt dans le forum, tu auras plus de chance d'avoir des réponses

DarK Sidious

signaler à un administrateur
Commentaire de MadM@tt le 20/08/2006 19:14:11

Hello,
Alors désolé pour les erreurs, déjà pour "Vrsion 3.0 of SystrayControl.ocx is not registred. The control will be upgraded to version 5.0", c'est juste qu'il met à niveau la version de l'ocx, ça me le fait à chaque fois que je compile l'ocx, je sais pas pourquoi. Enfin c'est pas une erreur, juste une information.
Sinon j'étais sur d'avoir mis l'ocx, ça a peut etre été supprimé à l'upload (j'avais aussi un .exe)

Je re-essaye de télécharger.


Sinon oui c'est les vacances lol, alors j'en profite ^^

signaler à un administrateur
Commentaire de freegamer le 20/08/2006 19:19:05

Re-Bonjour,

J'ai déjà posé ma question sur le forum mais sans résultat il y a bien longtemps, alors je me disais que la j'aurais pu avoir une réponse.

Merci.

signaler à un administrateur
Commentaire de MadM@tt le 20/08/2006 20:35:16

arfffff mince, j'ai une fuite de mémoire apparement.
Laissez tourner le prog et lancez le gestionnaire des taches, et regardez l'utilisation mémoire, vous allez rigoler lol, elle augmente de 2mega par seconde.

J'ai pas trop le temps de chercher en profondeur ce soir, mais si quelqu'un a l'occaz de regarder et de voir d'ou ça viens ça m'arrangerait. Sinon je chercherais demain ou mardi

signaler à un administrateur
Commentaire de Cacophrene le 21/08/2006 08:18:24

Salut !

J'ai une suggestion à te proposer. Je suis en train de jouer avec une fonction de tracé d'échiquier en ce moment et je ne peux m'empêcher d'imaginer ce qui se passe dans ton contrôle ctlSystray comme... une sorte d'échiquier :-)

Je m'explique.

Si j'ai bien vu, tu crées un groupe de contrôles PictureBox où sont stockées les icônes. Il me semble que l'on peut se passer de ces contrôles. En effet :

a) Il me semble que l'on peut copier les icônes directement sur le fond UserControl

b) Deux coups de cuiller à pot (pot mathématique bien sûr) permettent de les disposer sans chevauchement à la manière d'un échiquier

c) On peut toujours les sélectionner une par une pour les récupérer.

Je dis ça comme ça... ce n'est qu'une humble suggestion. Cela dit, n'oublions pas l'essentiel : c'est une très bonne source (malgré un léger petit affolement du logiciel au lancement).

Cordialement,
Cacophrène

signaler à un administrateur
Commentaire de Renfield le 21/08/2006 09:00:18 administrateur CS

FreeGamer, c'est écrit dans la Doc, et mentionné dans quelques sources sur le site... il  suffit d'intercepter le message "TaskbarCreated"

signaler à un administrateur
Commentaire de bouv le 21/08/2006 12:10:49

MadM@tt>>Le problème de l'ocx est ailleurs. Ouvre ton fichier SystrayControl.vbp avec le bloc note. Tu verra que le chemin de certain module est mis en dur. Ils sont donc introuvables ailleurs que chez toi.

"D'ailleurs si quelqu'un aurait une idée pour recevoir les événements du genre : image modifiée, ou alors ajout d'un truc etc..."
Je pense qu'en sous-classant les icones tu dois pouvoir récupérer ce genre d'évenement, mais Renfield t'en dira surement plus que moi à ce sujet ;-)

signaler à un administrateur
Commentaire de Renfield le 21/08/2006 12:21:11 administrateur CS

oui, via du subclassing, tout simplement....
c'est une ToolBarWindow, ce qui implique que tu peux observer entre autres :
TB_SETBUTTONINFO
TB_INSERTBUTTON
TB_DELETEBUTTON


signaler à un administrateur
Commentaire de MadM@tt le 21/08/2006 13:23:30

Cacophrene > c'est ce que je pensais faire au début, mais après il faut gérer le clic sur l'icone par exemple, et la on peut récupérer indépendamment chaque icone (enfin remarque je peux toujours utiliser l'imagelist donc non mon argument tien pas), mais avec des picturebox c'est plus simple, et je le reconnais au début quand je me suis lancé dans ça, je ne me suis pas trop soucié de ce coté de l'usercontrol, je voulais déjà avoir mes icones et après voir ^^...

Sinon pour le subclassing, je ne m'y suis jamais vraiment mis mais je crois que je vais commencer.
J'ai la semaine pour m'y mettre et essayer de récupérer les évenements des icones, et merci pour les infos.

Sinon il reste quand meme le problème majeur : la fuite de mémoire. Je n'arrive pas à voir d'ou ça vient, et je perd 2 méga de mémoire vive par seconde lol, ce qui n'est pas très pratique. J'ai peur que ça soit la dll de ShareVB car dans sa source aussi il y a une perte de mémoire au lancement (mais après pour lui ça se rafraichit pas donc c'est moins visible et moins génant).
Encore que si j'arrive avec le subclassing, j'aurais peut etre plus ce problème, à voir.

Merci à vous tous ;)

PS : pour le projet vb, je vais le modifier et mettre la source à jour

signaler à un administrateur
Commentaire de Cacophrene le 21/08/2006 15:26:00

Salut !

Hé oui, voir son programme marcher est un plaisir d'une rare intensité. Je comprends bien que le détail des PictureBox n'ait pas été une priorité.

Bon courage pour la recherche de la fuite !

Cordialement,
Cacophrène

signaler à un administrateur
Commentaire de MasterHack le 21/08/2006 20:12:59

Salut,
interessant ce codes, je l'ai testé, ça marche sauf l'erreur au lancement deja mentionnée, j'éxaminerai le code dés que j'aurai plus de temps.
merci MadM@tt et bonne continuation ;)

signaler à un administrateur
Commentaire de MadM@tt le 22/08/2006 01:42:15

;) merci

signaler à un administrateur
Commentaire de bitshifter le 29/08/2006 20:59:58

["Vrsion 3.0 of SystrayControl.ocx is not registred. The control will be upgraded to version 5.0", c'est juste qu'il met à niveau la version de l'ocx, ça me le fait à chaque fois que je compile l'ocx, je sais pas pourquoi.]

Je crois que c'est un problème de compatibilité binaire.
Pour le régler, il faut créer un dossier dans lequel une copie du OCX frais compilé est mise comme référence. Ensuite aller dans "Project/Project properties", dans le tab "Compile", dans le frame "Version compatibility" et choisir l'option "Binary compatibility". Y sélectionner le OCX de référence précédement copié.

Lors de la compilation, VB assigne des GUIDs à chaque interface exposée. Lors d'une recompilation, de nouveaux GUIDs sont assignés à moins que l'option compatibilitée binaire soit sélectionnée; dans ce cas les GUIDs demeure ceux précédemment assignés. Si les GUIDs sont différents, pour VB c'est un nouveau OCX, d'ou update.

Expérience acquise en gérant un produit commercial avec des dizaines d'OCX.

signaler à un administrateur
Commentaire de Renfield le 30/08/2006 09:33:46 administrateur CS

Je sais pas si c'est un problème de compatibilité... puisqu'il a justement décelé qu'il n'était qu'une version plus récente de la chose, et non un ocx tout autre.

signaler à un administrateur
Commentaire de sdcoder le 23/03/2007 02:06:11

C'est excellent mais ça ne marche pas sans Explorer.exe en mémoire, c'est dommage !

signaler à un administrateur
Commentaire de Renfield le 23/03/2007 07:58:19 administrateur CS

sans Explorer.exe en mémoire.... tout un programme !

effectivement, quand on le décharge ('tskill explorer' sous Xp), on a même plus de barre des taches, et donc plus de Systray...
les icones de cette dernière sont d'ailleurs détruites, tout simplement, puisqu'il faut les recreer ala reception de l'evenement "TaskbarCreated" ...

bref, pas compris ta remarque...

signaler à un administrateur
Commentaire de sdcoder le 23/03/2007 10:28:23

RENFIELD, Ce n'était pas une remarque (négative) mais une idée (positive). Par exemple, pour développer notre propre desktop sans un Explorer qui prend beaucoup de ressources et tout en bénéficiant des icones et menus du systray. J'y vois de nombreuses applications !
Enfin si tu vois comment refaire le même systray sans explorer en récréant peut-être notre propre taskbar ou notre propre explorer ?
Merci encore pour ta source.

signaler à un administrateur
Commentaire de MadM@tt le 23/03/2007 13:30:46

SDCoder > Ah ouais c'est une méga idée ça ! Je sais pas si c'est réalisable facilement, mais en y pensant, on recrée un bureau, une barre des taches... tout un environnement
On peut le faire plus léger par exemple pour pouvoir réserver les ressources aux jeux, ou alors plus pratique, ou ajouter plein d'outils... Genre comme sous linux on peut choisir le bureau.
Pour ça on kill explorer, on crée un message TaskbarCreated (je ne sais pas si c'est possible ?) et on capture les réponses des applis qui recréent leurs icones pour les afficher dans notre bureau. ça a pas l'air simple, mais si c'est possible ça ouvre pas mal de portes.
Par contre on pourrait pas lancer un truc qui utilise explorer derrière (genre explorateur de fichier par exemple)

signaler à un administrateur
Commentaire de sdcoder le 23/03/2007 23:06:06

Bravo MADM@TT, tu lis dans mes pensées. Pour la partie navigation de fichiers ou autres, il y en a plein Internet. Disons qu'en plus, on pourrait éviter de montrer toutes les parties de windows dont l'utilisateur Lambda n'a pas besoin mais qu'on aurait quand même les événements des applications dans un systray. Allez les gars, tous au boulôt, ça doit bien être possible de trouver comment fait la taskbar de l'explorer ! avec un petit ice ;-) J'attends la source avec impatience. Envoyer le message TaskBarCreated et écouter ces messages doit être une formalités, je pense qu'il doit falloir lancer notre nouvelle application en SHELL dans la base de registre.
Je te contredis juste sur le fait qu'un programme en shell peut lancer l'explorateur windows, je l'ai testé, la barre de tâches ne sera pas présente par contre. Allons-y !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comment dois-je faire pour que mon programme fonctionne uniquement dans le system tray ? [ par TheWaxWeaZle ] Comment dois-je faire pour que mon programme fonctionne uniquement dans le system tray et que je l'utilise que par le clique droite pour ces fonction Icone dans le system tray [ par Budzy ] Bonjour à tous,j'ai placé un icone dans le system tray grace au api et quand je quite mon programme, l'icone reste dans le system tray jusqu'a ce que systray, taskbar, service [ par picwin ] salut a toi mon sauveur,serais t'il possible que quelqu'un est une reponse a mes questions ????????1) est il possible d'avoir un icone en systray ave popmenu et system tray [ par kelu95 ] Salut a tous, je suis tout debutant en VB, et je suis en train de faire un prog qui affiche un menu lorsque on clique sur une icone affichée dans la b System Tray en VB.NET [ par MSieurNono ] Bonjour, je n'arrive pas à faire marcher les API pour mettre mon application dans le system tray.....Quelqu'un pourrait-il m'aider ?!? Enlever une icone quelconque du system tray [ par Xenon974 ] Bonjour,Je cherche à enlever une icone du system trayEn fait j'utilise WinVNC et je voudrais que mes utilisateursne puisse pas accéder à l'icone se tr ShowInTaskBar et Systray [ par EvilGost ] Bonjour à tous,J'ai un petit problème.Mon programme contient un icon qui se met dans le Systray dès le lancement et qui s'enleve dès que je quitte.Le comment restaurer une application reduite dans le "system tray" [ par cologo ] Bonjour,     À partir d'une programme que je suis en train de faire, j'aimerais utiliser une (très intéressante) loupe que j'ai trouvé sur internet. L ??? IMAGE-LIST SYSTEM ??? [ par ScSami ] Je cherche à faire un explorateur de fichiers made by me.Et je n'arrive toujours pas, malgrès mes nombreux messages sur le forum, à obt Faire disparaitre icone du tray lorsque programme quitté [ par seozus ] Jai une application utilisant un systray icon. Mais lorsque je ferme celui ci, l'icone reste dans le systray, je dois passer ma souris par dessus pour


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.