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 :

Programme d'automatisation de clics


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 1
    Points : 0
    Points
    0
    Par défaut Programme d'automatisation de clics
    Salut à tous,

    J'aurai besoin d'un peu d'aide avec mon code.

    'ai écris un programme qui permet de lire les valeurs d'un fichier afin de les envoyer à une fonction qui exécute un clic sur l'écran aux coordonnée précisées dans le fichier, et ce autant de fois qu'il y a de coordonnées dans le fichier.

    Donc j'ai 2 fonctions:
    -void selec --------- Celle-ci lis les valeurs et les renvoie en int

    -void clic_ici --------- Celle-ci reçoit des valeurs en paramètre et effectue un clic en fonction de celles-ci

    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
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
     
     
    void selec(int* ix, int* igrec, int ligne)                //fonction qui va chercher les coordonnées a une pos precise et les renvoie
    {
       ifstream fichier("C:map.txt", ios::in);
     
       int x=0;
       int y=0;
     
       char mot[128];
     
       if(fichier)
       {
          //L'ouverture s'est bien passée, on peut donc lire
     
          string chaine; //Une variable pour stocker les lignes lues
          int cpt=0;
     
          while(getline(fichier, chaine)) //tant qu'on n'est pas à la fin, on lit
          {
              //affichage 1 ligne
             //cout << chaine << endl;
     
     
             cpt++;
                if (cpt==ligne)
              {
                  strcpy (mot,chaine.c_str());
                  sscanf(mot,"%d %d",&x,&y);
              }
          }
     
     
       }
       else
       {
          cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
       }
     
        //printf("X: %d\tY: %d",x,y);
        (*ix)=x;
        (*igrec)=y;
    }
     
    void clic_ici(int x, int y)
    {
        INPUT i[2];                                                                     //cree 2 structures INPUT
        memset(i, 0, sizeof(i));                                                        //cree un buffer qui vient contenir la valeur de input
        i[0].type = i[1].type = INPUT_MOUSE;                                            //associe les structures a la souris
        i[0].mi.dx = (65535. / (double)GetSystemMetrics(SM_CXSCREEN)) * x;
        i[0].mi.dy = (65535. / (double)GetSystemMetrics(SM_CYSCREEN)) * y;
        i[0].mi.dwFlags = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN;
        i[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
        SendInput(2, i, sizeof(INPUT));
    }
    Et voici mon main:

    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
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
     
    #include <string>
    #include "fonction.h"
     
    int main()
    {
        int x;
        int y;
        int cpt=1;
        int maximum=4;
        int delai_en_secondes=3;
     
        char choix;
     
    //    while(1){cout<<"Bonjour"<<endl;Sleep(delai_en_secondes * 1000);}
     
        while(cpt<maximum)
        {
            selec(&x,&y,cpt);
     
            cout<<"Chargement des coordonnees"<<endl;
            Sleep(500);
     
     
            cout << x <<"/"<< y << endl;
            cout<<"Fait"<<endl;
     
            Sleep(delai_en_secondes * 1000);
            clic_ici(x,y);
            cpt++;
        }
    return 0;
    }
    Jusqu'ici tout va bien, tout compile.. Tout s'éxécute, la souris bouge une première fois aux coordonées indiquées,
    Seulement le programme refuse d'aller plus loin que la première coordonée.
    Frustrant, surtout lorsque j'ai remarqué qu'en plaçant la ligne d'appel de la fonction clic_ici en commentaire, le programme m'affiche bien les valeurs une par une.

    ##
    Après plusieurs executions j'ai remarqué qu'en appuyant sur le clavier lorsque ça tourne dans le vide, le programme se relance jusqu'à avoir effectué le prochain clic pour ensuite se remettre à tourner dans le vide (jusqu'au prochain coup de clavier).


    J'en conclus que le problème réside dans la fonction clic_ici, mais je n'ai pas la moindre idée de par où commencer.
    Je sollicite donc votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    https://msdn.microsoft.com/fr-fr/lib...or=-2147217396
    Vous n'êtes absolument pas rigoureux avec ce genre d'API. (non initialisation des TOUS les champs de "i[1]", vérification des valeurs de retours, etc...

    https://stackoverflow.com/questions/...ent-simulation

Discussions similaires

  1. [XL-2007] Pause programme en attendant un clic
    Par Air Hache dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/06/2011, 19h44
  2. [XL-2003] Automatiser les clics
    Par philip31 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/07/2009, 08h41
  3. Programme d'automatisation clavier/souris
    Par Manu76 dans le forum Périphériques
    Réponses: 2
    Dernier message: 12/03/2006, 17h47
  4. Help ! Programmer un jeu vidéo
    Par Jay Bee dans le forum DirectX
    Réponses: 7
    Dernier message: 18/03/2004, 18h38
  5. Help ! Programmer un jeu vidéo...
    Par Jay Bee dans le forum OpenGL
    Réponses: 3
    Dernier message: 05/03/2004, 15h34

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