6 votes

NotifyIcon a-t-il un équivalent MouseDown ?

J'ai une NotifyIcon dans la barre d'état système. Comment puis-je détecter si l'utilisateur a cliqué avec le bouton gauche de la souris sur cette icône ? J'ai supposé que le MouseDown serait ce que je voudrais utiliser, mais il ne gère que le clic droit et le clic du bouton du milieu. Pour le clic gauche, il ne se déclenche qu'une fois que l'utilisateur a lâché le bouton (comme s'il venait d'effectuer un clic normal). Existe-t-il un moyen d'obtenir uniquement l'événement MouseDown ?

4voto

Hans Passant Points 475940

Le shell synthétise le message MouseDown à partir de l'événement up. Vous comprendrez pourquoi il en est ainsi lorsque vous cliquerez sur le bouton et le maintiendrez enfoncé, puis que vous commencerez à le faire glisser. Notez que la fenêtre de débordement de la zone de notification apparaît et vous permet de faire glisser l'icône pour la retirer de la zone visible. Cela ne peut pas fonctionner dans les deux sens.

Techniquement, vous pourriez accrocher la fenêtre appartenant à Explorer.exe pour avoir accès aux messages avant qu'Explorer ne le fasse avec SetWindowsHookEx(). Cependant, cela nécessite une sorte de DLL que vous ne pouvez pas écrire en C#, elle doit être injectée dans Explorer. C'est très déstabilisant et il est difficile de battre la concurrence qui essaie de faire la même chose. C'est aussi le genre de code qui cause des nuits blanches à l'équipe appcompat de Microsoft.

3voto

Phil Points 19299

Il semble que l'API Win32 sous-jacente Shell_NotifyIcon envoie un WM_LBUTTONDOWN message lorsque l'utilisateur clics l'icône . D'après le MSDN Quoi qu'il en soit.

L'examen du code source Windows Forms pour NotifyIcon révèle une gestion standard de l'événement "mouse down", donc si le message Win32 était envoyé au "bon" moment, il fonctionnerait comme vous le souhaitez/attendez.

Je suis d'accord avec un commentaire précédent selon lequel NotifyIcon va avaler WM_LBUTTONDOWN puisqu'il doit capturer la souris pour permettre à l'utilisateur de faire glisser les icônes.

Il est possible que cet article sur la création d'une icône de barre d'état pour WPF sera utile car elle montre comment utiliser les icônes de la barre d'état. SetWindowsHookEx etc. en C#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X