IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Simulation d'un clic avec l'API Windows [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut Simulation d'un clic avec l'API Windows
    Bonsoir à tous !

    Je suis viens de découvrir le C#, et afin de me familiariser avec ses rudiments je me suis fixé pour objectif de coder un mini-programme permettant, via l'API Win32 principalement, de simuler un clic et ce, sans aucune incidence sur la souris. De plus, il pourra s'effectuer même lorsque la fenêtre de l'application est réduite.

    Il se lance via la ligne de commande suivante :
    simulation_clic.exe "titre de la fenêtre" x_absolu y_absolu

    Or le fait est que tout a l'air de fonctionner à l'exception du clic, qui lui qui ne se déclenche pas.

    Pouvez-vous s'il vous plaît jeter un coup d'oeil avisé à ma source et détecter ce qui cloche ? J'ai vraiment besoin de ce programme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    using System.Runtime.InteropServices;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace ConsoleApplication2
    {
        class source
        {
            private const uint WM_LBUTTONDOWN = 0x0201;
            private const uint WM_LBUTTONUP = 0x0202;
     
            private static readonly IntPtr MK_LBUTTON = new IntPtr(0x0001);
     
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
            static extern bool ScreenToClient(IntPtr hWnd, ref Point lpPoint);
     
            private class NativeMethods
            {
                [DllImport("user32.dll", SetLastError = false)]
                internal static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
            }
     
            [DllImport("user32.dll", EntryPoint = "FindWindow")]
            private static extern int FindWindow(string sClass, string sWindow);
     
     
     
               /* Le programme se lance avec la ligne de commande suivante :
               simulation_clic.exe "titre de la fenêtre" X_absolu Y_absolu */
     
            static void Main(string[] args)
            {              
                // Récupération des paramètres et modification des types de variables
                string titre_fenetre = args[0];
                int X_absolu = int.Parse(args[1]);
                int Y_absolu = int.Parse(args[2]);
     
                // Détermination du handle de la fenêtre en fonction de son titre
                int handle_int = FindWindow(null, titre_fenetre);
                IntPtr handle = new IntPtr(handle_int);
     
                // Conversion des deux 'int' en un 'Point'
                Point coord_fenetre = new Point(X_absolu, Y_absolu);
     
                // Transformation des coordonnées absolues en coordonnées relatives à la fenêtre
                ScreenToClient(handle, ref coord_fenetre);
     
     
                // ... Jusque là c'est ok !
     
     
                // Mise au point du lParam
                IntPtr lParam = new IntPtr(coord_fenetre.X | (coord_fenetre.Y << 16));
     
                // Simulation du clic
                NativeMethods.PostMessage(handle, WM_LBUTTONDOWN, MK_LBUTTON, lParam);
                NativeMethods.PostMessage(handle, WM_LBUTTONUP, IntPtr.Zero, lParam);
     
                // Le clic ne s'exécute pas...
            }
        }
    }
    Merci d'avance !

    PS : Je suis sous Windows 7 64bits, j'utilise Visual Studio 2010 Express et lorsque je compile, la solution apparaît dans un dossier 'x86'. Au cas où ces données pourraient avoir un quelconque lien avec mon problème...

  2. #2
    Membre actif Avatar de dotEden
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 66
    Par défaut
    Bonsoir,

    Je ne suis pas sur de bien comprendre, mais essaye d'écrire ce qui suit dans une fonction avec X et Y en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
    Sinon, une autre possibilité serait de faire une fonction qui a pour arguments la position x et y de la position du clic sur la fenêtre, lors de l'événement du clic de la souris dans ta fenêtre tu récupères la position x et y de la zone où tu as cliqué et tu appelles ta fonction.
    Ensuite dans ton main tu ajoutes un string[] en paramètre et tu vérifies que dans ce tableau tu ais bien 2 arguments int (parse avec try/catch) et un argument string "titre de la fenêtre" puis tu envoies les valeurs dans ta fonction.
    En espérant répondre à tes attentes.

    Cordialement

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut
    J'ai finalement trouvé, mais merci !

  4. #4
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 33
    Par défaut
    Hello,

    Si tu peux poster la solution, ça serait cool et ça pourrait aider le suivant =)

    +++

    Rémy

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut
    http://www.cplusplus.com/forum/windows/63948/

    Par contre c'est du C++, au risque de me faire taper sur les doigts par un modo Vive les forums US !

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/12/2005, 12h37
  2. Tutorial d'initiation a la programmation avec l'API Windows
    Par mcdonald dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 16/09/2005, 18h20
  3. Stocker un imprim ecran sous bmp avec l'api windows
    Par Tofalu dans le forum Windows
    Réponses: 7
    Dernier message: 04/05/2005, 12h32
  4. Réponses: 3
    Dernier message: 09/11/2004, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo