Click de souris

Résolu
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016 - 26 avril 2008 à 13:07
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016 - 28 avril 2008 à 03:36
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 avril 2008 à 15:09
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.
3
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016
28 avril 2008 à 03:36
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;
3
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016
26 avril 2008 à 15:35
Ok merci. Je vais voir SendInput
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 avril 2008 à 18:46
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
*/
0
Rejoignez-nous