2011-03-02 2 views

Répondre

1

Shell_NotifyIcon fonctionne en envoyant un WM_COPYDATA message to the taskbar spécial, si vous injectez dans l'explorateur et sous-classe la barre des tâches, vous pouvez attraper ce message, vous pouvez alors obtenir le numéro de processus en appelant GetWindowThreadProcessId sur COPYDATAstruct.NOTIFYICONDATA.hwnd.

... et bien sûr, c'est un hack et repose sur des informations non documentées qui pourraient changer à tout moment!

+0

Si vous comptez sur des détails d'implémentation non documentés, pourquoi s'embêter? Vous pouvez lire les structures internes directement via TB_GETBUTTON et ReadProcessMemory (http://www.ureader.com/msg/14841415.aspx) – Luke

+0

@Luke: Et cela fonctionnerait-il avec les éléments cachés sur Win7? – Anders

+0

La classe Toolbar prend en charge les boutons cachés, mais je suppose que cela dépend de la façon dont Explorer implémente les icônes cachées (est-ce un bouton caché ou n'y a-t-il aucun bouton?). Un seul moyen de le savoir. – Luke

1

Je ne crois pas que ce soit possible. Certes, Spy ++ signale que la zone de notification est une seule fenêtre nommée "Zone de notification sponsorisée par l'utilisateur". Cette fenêtre est finalement associée à la fenêtre du bureau et n'a aucune association évidente avec le processus qui a créé l'icône de notification.


Eh bien, par possible je veux dire possible sans recourir à des hacks comme Anders suggère qui est sans doute possible, mais pas ce que j'imagine l'OP cherche!

+0

Eh bien, la question est marquée avec le débogage. En arrière dans la journée il y avait un produit nommé TraySaver qui l'a fait, un couple d'articles MS KB même liés à = = – Anders

+0

@Anders je prends la balise de débogage pour signifier que OP essaye de déterminer quel processus parmi les nombreux qui sont courir est celui qui était responsable de l'icône. Si c'était moi, je regarderais la description et le nom de l'entreprise dans Process Explorer et verrais si je pouvais trouver une correspondance. Ensuite, je tuerais le processus et verrais si l'icône disparaissait! –

1

Je viens de me rendre compte que dans Windows 7, le menu 'Sélectionner les icônes et les notifications qui apparaissent dans la barre des tâches' aide un peu ici. Trouvez-le en faisant un clic droit sur la barre des tâches, allez dans "Propriétés", puis cliquez sur le bouton "Personnaliser ..." dans le cadre "Zone de notification".

Chaque ligne de cette fenêtre représente une icône de la barre des tâches que Windows Explorer a vue. Parmi les deux rwos de gauche, je crois que le premier est la description du processus comme indiqué dans le Gestionnaire des tâches, et le bas est le titre de la fenêtre pour la fenêtre affichant l'icône de la barre des tâches.

Cela m'a aidé à retrouver mon problème original! VisualSVN ouvrait un 'Inscrivez-moi!' nag fenêtre dans la barre d'état système, malgré aucun processus VisualSVN évident en cours d'exécution. Finalement, j'ai remarqué que cette fenêtre nag a disparu lorsque j'ai fermé Visual Studio, il était donc clair que la DLL du complément VisualSVN chargé dans Visual Studio créait la fenêtre Nag.

Questions connexes