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

Dragonmaster Messages postés 126 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 3 avril 2009 - 20 août 2006 à 17:44
sdcoder Messages postés 16 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 18 décembre 2009 - 23 mars 2007 à 23:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39192-recuperer-les-icones-du-systray-dans-votre-programme-ocx-system-tray

sdcoder Messages postés 16 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 18 décembre 2009
23 mars 2007 à 23: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 !
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
23 mars 2007 à 13:30
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)
sdcoder Messages postés 16 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 18 décembre 2009
23 mars 2007 à 10:28
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.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 mars 2007 à 07:58
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...
sdcoder Messages postés 16 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 18 décembre 2009
23 mars 2007 à 02:06
C'est excellent mais ça ne marche pas sans Explorer.exe en mémoire, c'est dommage !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 août 2006 à 09:33
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.
bitshifter Messages postés 61 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 28 mai 2012 1
29 août 2006 à 20:59
["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.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
22 août 2006 à 01:42
;) merci
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
21 août 2006 à 20:12
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 ;)
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
21 août 2006 à 15:26
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
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
21 août 2006 à 13:23
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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 août 2006 à 12:21
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
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
21 août 2006 à 12:10
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 ;-)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 août 2006 à 09:00
FreeGamer, c'est écrit dans la Doc, et mentionné dans quelques sources sur le site... il suffit d'intercepter le message "TaskbarCreated"
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
21 août 2006 à 08:18
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
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
20 août 2006 à 20:35
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
cs_freegamer Messages postés 99 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 16 juin 2007
20 août 2006 à 19:19
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.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
20 août 2006 à 19:14
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 ^^
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 août 2006 à 18:45
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
cs_freegamer Messages postés 99 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 16 juin 2007
20 août 2006 à 18:24
Bonjour,

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

Merci de me répondre.
Dragonmaster Messages postés 126 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 3 avril 2009
20 août 2006 à 17:44
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