7
votes

Comment déclencher par programme une souris à gauche cliquez sur C #?

Comment pourrais-je déclencher de manière programmable un événement de clic gauche sur la souris?

Merci.

Edit: L'événement n'est pas déclenché directement sur un bouton. Je vis pour la plate-forme Windows.


2 commentaires

Dans quelle plate-forme? Winforms? WPF? Silverlight? WebForms (= html / javascript)? Ou juste "Windows" (bas niveau)


Dupliqué possible de Comment simuler le clic de souris dans C #?


3 Réponses :


8
votes

S'il est juste sur un bouton, vous pouvez utiliser

button1.PerformClick();


1 commentaires

C'est étrange pour moi que Java semble avoir une meilleure prise en charge intégrée que c # pour une clic de la souris dans Windows à un endroit arbitraire, mais la bibliothèque INPUTSIMULATOR est exactement ce que je cherchais. Vous devriez rendre cela plus important dans votre réponse.



1
votes

https: / /web.archive.org/web/20140214230712/http://www.pinvoke.net/default.aspx/user32.sendinput

Utilisez l'API Win32 pour envoyer une entrée.

mise à jour:

Puisque je ne travaille plus avec Win32 API, je ne mettrai pas à jour cette réponse pour être correcte lorsque les changements de plate-forme ou les sites Web deviennent indisponibles. Étant donné que cette réponse n'est même pas conforme aux normes Stackoverflow (ne contient pas la réponse elle-même, mais plutôt un lien vers une ressource externe, maintenant défunct), il ne sert à rien de donner des points ni de dépenser plus de temps dessus.

Au lieu de cela, jetez un coup d'œil à cette question sur Stackoverflow, que je pense est un duplicata:

Comment simuler le clic de souris dans C #?


3 commentaires

Je trouve que cela ne fonctionne pas par ex. Le débogueur Visual Studio Débugger met une ligne sous uint et sous entrée [] Je vois qu'il n'y a pas de catégorie de ce type que je peux changer cela en uint32 mais je ne peux pas quoi le changement équivalent serait d'entrer [] pour le faire fonctionner


@barlop merci de creuser cette relique :) Et je suis désolé de ne pouvoir vous aider avec cela. Je l'ai marqué comme obsolète. Cherchez de meilleures réponses, pour ex. Ici Stackoverflow.com/questions/ 2416748 / ...


Vous avez compris la validité de votre réponse, Andrei a déclaré que la solution de Mouse_Event est obsolète et votre solution SendInput est davantage à jour. Et dans la question que vous avez liée à, la réponse la plus classée a la solution de la souris.Event .. donc votre La réponse peut bien être plus à jour que celle de celle-ci. Et simplement parce qu'un bon site Web, Pinvoke a été détourné ou redirige pour redégarrer la société de logiciels, ne signifie pas que les informations sur la page Web sont obsolètes. En fait, la page principale du site Web de Pinvoke pour le moment dit pour la maintenance.



13
votes

Pour effectuer un clic de souris:

[DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);

        public static void MoveCursorToPoint(int x, int y)
        {
            SetCursorPos(x, y);
        }


3 commentaires

J'ai vu celui-ci, essayé, mais la fonction de souris_event est obsolète. J'essaie de faire la même chose avec SendinCut maintenant.


En plus de Mouse_Event étant remplacée par SendInput, vous pouvez passer la position de la souris en définissant le masque de MouseEventf_absolute dans le premier argument et en passant les coordonnées X et Y dans les deuxième et troisième arguments, plutôt que de l'appeler de Setcursorpos d'abord.


Je vais essayer avec cette méthode depuis (comme commenté la réponse Sendinput), Sendinput n'a pas encore travaillé pour moi. Avec cette méthode, j'ai eu une erreur Assistant de débogage géré "Pinvokestackimbalance" a détecté un problème dans "C: \ User ..... \ Debug \ hprog.vshost.exe". Informations complémentaires: Un appel à la fonction Pinvoke 'PROG1! PROG1.FRMBLAH :: MOUSE_EVENT' a déséquilibré la pile. Ceci est probable parce que la signature de Pinvoke gérée ne correspond pas à la signature cible non gérée. Vérifiez que la convention d'appel et les paramètres de la signature de Pinvoke correspondent à la signature non gérée de la cible.