Click de souris [Résolu]

Signaler
Messages postés
47
Date d'inscription
mardi 21 novembre 2006
Statut
Membre
Dernière intervention
5 novembre 2016
-
Messages postés
47
Date d'inscription
mardi 21 novembre 2006
Statut
Membre
Dernière intervention
5 novembre 2016
-
Bonjour a tous,
J'ai un petit problème sur c#
Je recherche comment simuler un clic de souris..
Je m'explique :
J'ai une application qui déplace la souris au clavier, sur tout l'ecran même hors mon application.
je recherche comment je pourrai cliquer avec la touche Espace. Pour ouvrir par exemple un dossier.
J'ai cru comprendre qu'on pouvait passer par L'api mais je n'ai pas compris grand chose. Si quelqu'un a un tuto simple ou une reponse à mon problème, je suis grand preneur.
voici ou j'en suis

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            const int WM_KEYDOWN = 0x100;
            const int WM_SYSKEYDOWN = 0x104;
            switch(keyData)
                    {
                         case Keys.Up:
                               Cursor.Position.Y--;
                               break;
                         case Keys.Down:

                               Cursor.Position.Y++;

                               break;
                         case Keys.Left:

                               Cursor.Position.X--;

                               break;
                         case Keys.Right:

                               Cursor.Position.X++;

                               break;
                         case Keys.Space:
                                //Click???

                               break;
                    }
          return base.ProcessCmdKey(ref msg, keyData);
        }

En gros je veux que losque j'appuie sur la touche espace, que
l'ordinateur le comprenne comme un clic, peu importe ou la souris se
situe sur l'écran.
Merci d'avance de vos réponse.

4 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Salut pour simuler le clavier ou la souris il faut utiliser SendInput, tu as de nombreux exemples sur le site. L'autre problème qui va se poser, c'est que ton appli une fois qu'elle va perdre le focus ne recevra plus les évènements clavier/souris, il faut installer un hook pour ça.
Messages postés
47
Date d'inscription
mardi 21 novembre 2006
Statut
Membre
Dernière intervention
5 novembre 2016

Pour ceux a qui ça interresserai, je post ce que j'ai fait pour y arriver...J'espère que c'est ce qu'il y a de mieux. en tout cas ca marche.
Je ne me suis pas encore penché sur le hook mais j'ai déjà fait un grand bond.
Merci Lutinore et coq.

Méthodes a ajouter :
[DllImport("User32.dll", SetLastError=true)]
        private static extern int SendInput(int nInputs, ref INPUT pInputs, int cbSize);
        public const int MOUSEEVENTF_LEFTDOWN    =0x0002;
        public const int MOUSEEVENTF_LEFTUP      =0x0004;       
        public struct INPUT
        {
            public int type;
            public MOUSEINPUT mi;
        }
        public struct MOUSEINPUT
        {
            public int dx;
            public int dy;
            public int mouseData;
            public int dwFlags;
            public int time;
            public int dwExtraInfo;
        }
        public void clique()
        {        
            INPUT aInput = new Form1.INPUT();          
            aInput.type = 0;
            aInput.mi.dwExtraInfo = 0;

            aInput.mi.mouseData = 0;

            aInput.mi.time = 0; 

             // simule l'appui sur le bouton gauche de la souris
            aInput.mi.dwFlags = Form1.MOUSEEVENTF_LEFTDOWN;            
            // on envoi l'appui (Form1 est le nom de ma form..)      
            Form1.SendInput(1, ref aInput, Marshal.SizeOf(aInput));

             // simule le relachement du bouton gauche de la souris

            aInput.mi.dwFlags = Form1.MOUSEEVENTF_LEFTUP;
            // on envoi le relachement (Form1 est le nom de ma form..)      

            Form1.SendInput(1, ref aInput, Marshal.SizeOf(aInput));                                
        }

appel de la méthode
case Keys.Space:
clique();
break;
Messages postés
47
Date d'inscription
mardi 21 novembre 2006
Statut
Membre
Dernière intervention
5 novembre 2016

Ok merci. Je vais voir SendInput
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Salut,

Attention avec SendInput sous Vista, l'UIPI peut bloquer son appel sans pour autant que ça soit signifié par un échec.
Concernant le hook, il serait peut être intéressant de creuser aussi du côté de RegisterHotKey pour la notatification (je ne me souviens plus si on peut l'utiliser pour une touche sans modificateur).

/*
coq
MVP Visual C#
CoqBlog
*/