begin process at 2010 02 10 03:17:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

API

 > 

click de souris


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

click de souris

samedi 26 avril 2008 à 13:07:18 | click de souris

soussous78

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.
samedi 26 avril 2008 à 15:09:26 | Re : click de souris

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !
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.
samedi 26 avril 2008 à 15:35:03 | Re : click de souris

soussous78

Ok merci. Je vais voir SendInput
samedi 26 avril 2008 à 18:46:50 | Re : click de souris

coq

Administrateur CodeS-SourceS
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
*/
lundi 28 avril 2008 à 03:36:25 | Re : click de souris

soussous78

Réponse acceptée !
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;


Cette discussion est classée dans : case, break, souris, keys, cursor


Répondre à ce message

Sujets en rapport avec ce message

Réutiliser une fonction [ par piep14 ] Bonjour, j'ai un dernier ptit problème. J'ai une fonction dans la classe parametre qui lit les valeurs de mon fichier XML et les affiches dans des ch attribution de valeurs de variable aux items d'une liste [ par manuweb_21 ] J'aimerais attribuer une valeur précise (je veux dire arbitraire, sans incrémentation ou décrémentation) a une variable pour chaque choix dans une lis treeview [ par akira3 ] y ai un petit problème avec un treeview.chacun de mes nones ne peut etre cliqué qu'une seule fois.La première fois tt marche à merveille mais la secon Detection des touches en Webform [ par dupuisj ] Bonjour,Je souhaiterais pouvoir naviguer dans un formulaire à l'aide des fleches du clavie, et je suis déjà face à un os.Je suis dans un web Form et a Probleme de conversion de byte pour lecture par un serveur [ par Liverion ] Bonjour,je voudrais ameliorer un programme que j'ai concu, qui fonctionne mais qui est un peu lourd :Je dois envoyer a un serveur des donnees pour une Switch case imbriqués [ par bigger ] Bonjour à tous,J'ai une forme avec plusieurs Groupbox contenant chacuns plusieurs boutons. Lorsque j'appui sur un bouton, je récupère le Tag du groupb Resolution d'opérations mathématique [ par iow4 ] Bonjour, j'aimerais creer une fonction qui prend comme parametre un int[] de  nombre et un nombre et qu'elle sorte toutes les opérations possible avec [C#] [Event OnKeyUP] L'event ne se lève qu'une seule fois ... [ par khattr ] Bonjour,Je cherche à capturer les touches Up, Down, Left, Right et Space sur ma form .J'ai trouvé de quoi faire sur MSDN soit : protected override boo à propos du champs date [ par medinfo87 ] salut tt le monde ,mon problème dans ce code si dessous est le comportement de l'affichage de dateje veux l'afficher comme suis : 2009/mars/11avec mar déplacemont d'un Graphics avec la souris [ par PrinceOfAlgeria ] salut , Comment peut on déplacer un Graphics avec la souris en c# ???j'ai pas trouvé comment modifier les coordonnés d'un graphics pour l'utiliser dan


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,203 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales