Comment puis-je désactiver la souris cliquez sur l'événement à l'échelle du système à l'aide de C#?
Hé les gars, j'ai un ordinateur portable avec une très sensible de la tablette tactile, et je voulais coder un petit programme qui pourrait bloquer l'entrée de la souris quand j'étais en tapant un papier ou quelque chose.
Je ne pense pas qu'il serait difficile de le faire, compte tenu de tout ce que j'ai vu sur bas niveau des crochets, mais j'avais tort (ce qui est étonnant, non?).
J'ai regardé que quelques exemples, mais les exemples que j'ai vu de bloquer le clavier et la souris, ou tout simplement cacher la souris.
L'aide de ce serait génial.
Pourquoi ne pas simplement désactiver cette souris, à l'aide du Gestionnaire de Périphériques?
peut-être changer les paramètres de sensibilité, ou que Jon a dit avec une chauve-souris de script. Certains ordinateurs portables disposent d'un bouton dédié. Les crochets sur la performance de manière significative, dans le cas où vous décider de les utiliser.
Vérifiez sur votre clavier... plus de chances vous avez de la fonctionnalité d'arrêt à l'entrée du tapis de souris complètement. Habituellement, c'est comme une icône bleue sur les touches de fonction (F1, F2...)
J'ai vérifié, il n'y a pas un interrupteur/touche de fonction
vous pouvez lire sur le problème de performances dans la vue d'ensemble des msdn.microsoft.com/en-us/library/ms644959(v=vs. 85).aspx
peut-être changer les paramètres de sensibilité, ou que Jon a dit avec une chauve-souris de script. Certains ordinateurs portables disposent d'un bouton dédié. Les crochets sur la performance de manière significative, dans le cas où vous décider de les utiliser.
Vérifiez sur votre clavier... plus de chances vous avez de la fonctionnalité d'arrêt à l'entrée du tapis de souris complètement. Habituellement, c'est comme une icône bleue sur les touches de fonction (F1, F2...)
J'ai vérifié, il n'y a pas un interrupteur/touche de fonction
vous pouvez lire sur le problème de performances dans la vue d'ensemble des msdn.microsoft.com/en-us/library/ms644959(v=vs. 85).aspx
OriginalL'auteur Ben | 2010-12-24
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez mentionné, vous pouvez le faire à l'aide d'un faible niveau de la souris crochet (
WH_MOUSE_LL)
, quoiqu'un peu mal. Ce qui se passe lorsque vous définissez un crochet, c'est que vous recevrez des notifications sur chaque entrée de la souris de l'événement (WM_MOUSEMOVE
,WM_LBUTTONDOWN
,WM_RBUTTONDOWN
,WM_MBUTTONDOWN
,WM_XBUTTONDOWN
,WM_NCXBUTTONDOWN
, l'équivalent des événements pour chacun de ceux-ci,WM_MOUSEWHEEL
, etWM_MOUSEHWHEEL
). Une fois que vous avez terminé le traitement de chaque événement, vous êtes censé d'appeler leCallNextHookEx
function, qui transmet l'information de l'événement sur l'application suivante dans la chaîne de crochet. Toutefois, si vous voulez éviter tout autre programme à partir de l'obtention de la souris pour saisir des informations, vous pouvez simplement ignorer l'appel de cette fonction à la fin de votre procédure de raccordement. La section "Remarques" ci-dessus liés à la documentation, l'explique ainsi:Et comme il s'avère, de bas niveau de la souris crochets ne sont pas réellement difficile en C#. Je viens de codé un moi-même, en fait. Mais plutôt que de l'affichage de cette monstruosité d'une bibliothèque, je vais vous référer à la plus simple extrait de code affiché sur Stephen Toub blog, que j'ai reproduit ici avec la coloration syntaxique pour plus de commodité:
Comme je l'ai expliqué ci-dessus, vous aurez envie de modifier son
HookCallback
méthode de ne pas appelerCallNextHookEx
une fois que vous avez terminé le traitement de l'événement de la souris, mais en retour quelque chose commenew IntPtr(1)
à la place.EDIT: Et ouais, comme d'autres l'ont mentionné, il y a probablement d'autres plus faciles, plus propres solutions à ce problème. Votre trackpad pilotes sont un excellent endroit pour chercher une option comme "Ignorer accidentelle entrée de la souris lors de la frappe". Si vous n'avez pas cette option, vous êtes probablement en utilisant le standard de Windows pilotes de souris. Essayer de télécharger les pilotes à partir de votre pavé tactile du fabricant de l'ordinateur portable le site internet du fabricant (pour ce que ça vaut, la plupart des non-Apple trackpads, j'ai vu sont Synaptics).
J'ai suggéré de modifier l'instruction de retour:
return new IntPtr(1);
. Cela fonctionne très bien pour moi. Comme je l'ai indiqué ci-dessus, je viens de terminer l'écriture et le test d'une bibliothèque en utilisant exactement la même méthode. Il n'y a pas besoin de modifier lenCode
valeur à tous, et vous ne pouvez pas simplement aller changer le type de retour de la méthode.Bizarre, j'ai essayé la même chose (avec IntPtr.Zéro), mais en vain. De quoi êtes-vous courir? J'ai la mienne sur windows 7, C# 3.5 Pourriez-vous m'envoyer votre code, peut-être que j'ai fait une faute de frappe quelque chose. Merci
Hmm, j'ai fait une faute de frappe, j'ai utilisé de retour de nouveau IntPtr(0); pas 1, merci!
Vous pouvez faire
CallNextHookEx
et puisreturn new IntPtr(1);
, donc tout le monde obtient le crochet, mais comme indiqué dans les docs elle permettra d'éviter le message de la propagation de la fenêtre.OriginalL'auteur Cody Gray
Beaucoup de touchpad pilotes ont cette option. I. e. Lorsque vous tapez, il ignore la tablette tactile d'entrée. Vous pouvez également fermer le robinet-cliquez sur, en s'appuyant sur les boutons de la tablette tactile pour cliquer.
Essayez d'abord le conducteur de l'utilitaire de configuration, avant d'essayer d'écrire votre propre.
+1 @Jim, il peut avoir l'un des miens!
OriginalL'auteur Tim