Pourquoi mon application ne reçoit-elle pas de messages d’inclinaison de la molette de la souris?

Dans cette question Comment détecter l’inclinaison de la molette de la souris, une réponse indiquant le code requirejs est affichée et acceptée.

J’ai implémenté ce code dans la méthode WndProc existante de mon application (qui fonctionne pour les autres messages que je dois intercepter), mais cela ne fonctionne pas. J’ai vérifié et WndProc ne semble pas recevoir de messages, encore moins ceux avec une valeur de 0x020E lorsque 0x020E la molette de la souris.

J’utilise un Microsoft Wireless Laser 5000 sur Windows XP SP3 (entièrement corrigé) avec .NET 3.5 SP1 installé.

J’ai mis à jour mes pilotes Intellipoint vers la version 7.0.258.0 du 08/05/2009.

D’autres applications (Visual Studio, Word, paint.NET, par exemple) s’activent et agissent lorsque la molette de la souris est inclinée; il doit donc s’agir de mon application, mais je ne vois pas ce que je faisais mal.

Juste pour l’exhaustivité, voici mon code:

  protected override void WndProc(ref Message m) { Trace.WriteLine(ssortingng.Format("0x{0:X4}", m.Msg)); switch(m.Msg) { case WM_EXITSIZEMOVE: Opacity = 1.0; break; case WM_SYSCOMMAND: int command = m.WParam.ToInt32() & 0xfff0; if (command == SC_MINIMIZE && this.minimizeToTray) { MinimizeToTray(); } break; case WM_MOUSEHWHEEL: // Handle tilting here break; } base.WndProc(ref m); } 

L’appel Trace.WriteLine est une tentative pour vérifier si les messages d’inclinaison passent. Les autres messages WM_EXITSIZEMOVE et WM_SYSCOMMAND sont en cours de réception. Les messages sont définis comme suit:

  private const int WM_EXITSIZEMOVE = 0x0232; private const int WM_SYSCOMMAND = 0x0112; private const int SC_MINIMIZE = 0xF020; private const int WM_MOUSEHWHEEL = 0x020E; 

REMARQUE J’ai supprimé la balise [hardware], car je suis sûr à 99% que ce n’est pas le matériel qui est en cause, car les autres applications reçoivent les messages.

METTRE À JOUR

J’ai ajouté une zone de texte multiligne avec des barres de défilement à mon application et recevant et agissant sur les messages d’inclinaison de la molette de la souris. Donc tout ce que j’ai à faire est de trouver le code pour cela;)

METTRE À JOUR

Cette question sur SuperUser peut avoir une incidence sur ceci – je garderai un œil sur les réponses.

Utilisez Spy ++ pour vérifier quels messages vous recevez.

EDIT : Vous pouvez également appeler m.ToSsortingng () dans votre méthode WndProc pour obtenir le nom (!) Du message que vous avez reçu. (Cela se fait par une instruction de commutateur géant dans Syetm.Windows.Forms.MessageDecoder.MsgToSsortingng )

Notez que les messages peuvent être envoyés uniquement à tout contrôle ayant le focus et non au formulaire lui-même; Si tel est le cas, vous pouvez utiliser un filtre de messages .

Notez également que différentes souris envoient différents messages de la molette de la souris. J’ai une souris Logitech qui envoie 0x20E avec un WParam négatif pour le défilement gauche et positif pour le défilement droit.


EDIT (en reponse aux commentaires)

N’oubliez pas que le défilement horizontal a été ajouté longtemps après le défilement vertical et n’est pas pris en charge par les anciens programmes. Par conséquent, le pilote de la souris pourrait bien rechercher des barres de défilement horizontales et les faire défiler de manière explicite. Essayez d’append une barre de défilement horizontale à votre formulaire, positionnée négativement de sorte que l’utilisateur ne la voie pas et voyez si cela change quelque chose.