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