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 :

Recherche d'une solution pour créer un robot


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Recherche d'une solution pour créer un robot
    Bonjour,

    Je voudrais m'essayer à la création d'un robot qui jouerai à ma place à mon jeu Flash préféré. L'idée est la suivante: je lance mon jeu flash dans mon navigateur, prêt à jouer, puis ensuite je lance mon programme dans une console qui se chargerait de cliquer au bon endroit au bon moment.

    Après avoir réfléchi, je recherche des solutions pour effectuer les fonctions principales de mon robot, à savoir:
    • Cliquer à un endroit précis sur mon écran: une fonction qui simule un clic utilisateur à une position définie en pixel par exemple.
    • Reconnaitre la couleur d'un pixel: une fonction qui est capable de lire la couleur d'un pixel à une position définie et d'en retourner le code RGB.

    Que pensez-vous de la faisabilité de ce programme ?
    Existe-t-il une bibliothèque pour faire ces tâches de base ?

    Il serait bien que le programme tourne sous Windows XP de préfèrence, mais si cela s'avère impossible alors sous Linux.

    Cordialement,

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 148
    Points
    148
    Par défaut
    1) Les hooks, msdn t'aidera.
    2) Pas trop dur ca... un minimum de recherche ne ferait pas de mal... Allez je suis gentil, regarde du côté de OpenCV.

    Faire un minimum de recherche soit même n'a jamais fait de mal...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    J'ai commencé à désespérer en tombant sur des forums qui m'apportaient aucune réponse...! Je dois reconnaitre que j'ai fait une recherche sommaire., je vais chercher un peu plus, en utilisant tes lignes directrices.
    Si je trouve, je posterai la solution.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 287
    Points
    218 287
    Billets dans le blog
    117
    Par défaut
    [Commentaire Idiot]
    Je trouve ça un peu dommage qu'un jeu fait pour vous divertir, soit réalisé par un robot. Vous n'allez plus vous amusé après.
    [/Commentaire Idiot]
    ( Chacun ses raisons ... je ne demande pas à avoir les autres ).
    Par contre je serai curieux d'avoir la réponse, car c'est une question souvent posé, finalement.
    Je crois qu'il te faudra le handle de la fenêtre pour réalisé les cliques. ( un HWND ... mais je m'avance peut être )
    ( va fouiner la doc des hooks :p )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Bonjour,

    J'ai trouvé la solution hier soir.
    Je la posterai ce soir en rentrant chez moi ^^

    Cordialement,

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Voila la solutions à mes deux problématiques de base.
    J'ai eu un petit peu plus de mal pour la seconde, du fait qu'il faut inclure une librairie.
    Je me suis également rendu compte qu'il est possible de faire plein de chose sympas en se basant sur les fonctions de le lib qui contient SetCursorPos.

    Simuler un clic sourie en C

    Nécessite d'inclure "windows.h" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void clicGauche(int x, int y) {
     
                // Définir la position du curseur de al souris
                SetCursorPos(x, y);
     
                // Simule l'action de clic du bouton gauche de la souris
                mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
     
                // Simule l'action de relâcher du bouton gauche de la souris
                mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            }
    Lire la couleur RVB d'un pixel à l'écran

    Nécessite d'inclure "windows.h"
    Nécessite de linker la librairie "libgdi32.a" avec la commande "-lgdi32" lors de la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void getCouleur(int x, int y, int* rDest, int* vDest, int* bDest) {
     
                int r, v, b;
                COLORREF nColor;
                HDC hScreenDC;
     
                hScreenDC = GetDC(0);
                nColor = GetPixel(hScreenDC, x, y); // Nécessite la lib libgdi32.a
     
                *rDest = nColor & 0xFF;
                *vDest = (nColor & 0xFF00) >> 8;
                *bDest = (nColor & 0xFF0000) >> 16;
     
            }

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    salut,

    je demande juste comme ça (je connait pas ces types/fonctions) mais d'où sort ton p.x et p.y? je vois biens des variables x et y mais pas de p???

    en cherchant a quoi sert GetDC(); (d'ailleurs j'ai pas trouvé, si quelqu'un pouvais m'aider...) j'ai lu qu'il fallait faire un ReleaseDC(); est-ce le cas?

    voila, peut être que tout est bon dans ton code mais je te dit ça pour que tu puisse corriger si jamais j'avais raison.

    d'autres part, la procédure getCouleur fonctionne t'elle sur tout l'écran? ou juste sur une fenêtre? comment savoir la taille de l'écran/la fenêtre?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Le p.x et p.y c'est parce que j'ai traduit trop rapidement mon code, dans lequel j'utilisais une classe Point pour les coordonnées. J'ai corrigé.

    Je ne sais pas du tout à quoi sert GetDC() mais visilement à récupérer une référence vers l'écran... et pour le ReleaseDC() je l'ai vu passer lors de mes recherches, mais j'ai pas plus d'info !

    Cela n'est pas totalement "mon code" dans le sens ou la plupart provient des recherches que j'ai faite. Je n'ai pas trop cherché à comprendre comment ça fonctionnait car ce n'étais mon but primaire, si j'avais trouvé une lib qui me fournissait juste le prototype des fonctions ça m'aurait suffit.

    En revanche je peux affirmer que getCouleur agit sur tout l'écran. D'ailleurs lorsque j'utilise mon robot, la console est en arrière plan et je pique les couleurs dans un repère qui commence à (0;0) dans le coin supérieur gauche de l'écran jusqu'en bas à droite, sans exception.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    GetDC http://msdn.microsoft.com/en-us/libr...71(VS.85).aspx

    Cela sert à récupérer (et verrouiller) un contexte d'affichage. Ne pas libérer ce contexte va provoquer à plus ou moins long terme des fuites de mémoire GDI.

    Il faut donc, comme indiquer dans la documentation faire systématiquement un ReleaseDC (http://msdn.microsoft.com/en-us/libr...20(VS.85).aspx)
    GetPixel (http://msdn.microsoft.com/en-us/libr...09(VS.85).aspx) est une API particulièrement lente.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 148
    Points
    148
    Par défaut
    GetDC permet de récupérer un "Device context", un objet de windows rien de bien compliqué.
    Et tu dois appeler ReleaseDC a chaque fois que tu appels GetDC pour récupérer un Contexte commun.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Merci pour l'info de ReleaseDC car mon robot étant censé tourner longtemps je pense que j'aurais pu avoir des petits soucis

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2014, 00h56
  2. Réponses: 0
    Dernier message: 31/10/2011, 21h14
  3. Réponses: 4
    Dernier message: 25/05/2010, 15h59
  4. Quelles solutions pour créer une Bases de données géographiques ?
    Par subzero82 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 25/11/2007, 22h45
  5. meilleur solution pour créer un document imprimable???
    Par martimacfly dans le forum XML/XSL et SOAP
    Réponses: 26
    Dernier message: 08/07/2004, 11h09

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