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

Windows Forms Discussion :

BOT Poker C#


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut BOT Poker C#
    Bonjour

    Je cherche à faire un bot poker en C#, je m'explique :

    Dès que le programme sera lancé, il devra jouer tout seul à ma place au jeux de poker en ligne que j'ai choisi (petit jeu flash)
    - dejà j'utilise emguCV pour reconnaître les cartes
    -à partir de la je décide de ce que je vais faire de ma main.

    quelqu'un s'est il déjà lancé dans un projet similaire ?

    Merci

    PS : quelqu'un sait il comment prendre un canvas(le jeu flash par exemple) d'une page web par exemple et la mettre sur un panel d'un windows forms ?

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Bonjour à vous,

    Pour la possibilité de mettre directement votre jeu flash dans votre formulaire, vous pouvez utiliser l'ActiveX de flash player.

    Plusieurs solutions sont possible pour aborder votre objectif.

    Vous pouvez par exemple simuler des clicks de souris/clavier sur le jeu mais du coup vous ne pouvez rien faire d'autre sur votre machine en même temps. Et vous pouvez également envoyer des messages directement au jeu (message dans le sens Windows du terme ici). C-à-d que votre application va envoyer des messages (signaux) qui diront au jeu que vous avez cliquez à tel ou tel endroit tandis que vous vous pouvez continuer à utiliser d'autre application quand vous le souhaitez.

    Pour cela, regardez du coté de la fonction SendMessage de l'API de Windows.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Pour l'instant je suis parti vers la première solution.
    Cependant mon prof m'a parlé de :
    -récupérer le canvas du jeux et de le mettre sur un panel du windows form (mais pas de façon manuel sous Visual studio )
    -s'attacher au processus du jeux (pour ensuite récupérer les variables du jeux ?)
    cette dernière ressemble à l'envoie de signaux car on peut faire autre chose entre temps.

    Sauf que je n'ai aucune idée de comment cela fonctionne...

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Citation Envoyé par freaks88 Voir le message
    -récupérer le canvas du jeux et de le mettre sur un panel du windows form (mais pas de façon manuel sous Visual studio )
    En effet vous pouvez "prendre" la fenêtre du jeu et l'afficher dans un panel. Pour cela, vous devrez utiliser plusieurs fonctions de l'API Windows:
    • FindWindow : Permet d'obtenir un handle vers une fenêtre.
    • SetParent : Permet de définir le parent de la fenêtre précisée via son handle.


    - FindWindow prend 2 paramètres. Le premier c'est le nom de la classe de la fenêtre et le deuxième son nom affiché (c.-à.-d. le nom affiché dans la barre de titre). Un seul des deux paramètre est nécessaire pour cette fonction.

    - Une fois que vous avez obtenu un handle via la fonction FindWindow, utilisez SetParent avec comme premier paramètre le handle trouvé ci-dessus et comme second paramètre, panel1.Handle par exemple (le handle du contôle dans lequel vous souhaitez ancrer la fenêtre).

    - Après vous pouvez surement pauffiner le tout avec SetWindowLong pour retirer des bordures etc mais cela n'est pas obligatoire.

    Citation Envoyé par freaks88 Voir le message
    -s'attacher au processus du jeux (pour ensuite récupérer les variables du jeux ?)
    cette dernière ressemble à l'envoie de signaux car on peut faire autre chose entre temps.
    Je ne vois pas trop ce que vous voulez dire par attacher au processus ? Pour ce que vous voulez faire je dirais que vous devez utiliser ReadProcessMemory et WriteProcessMemory et que pour ce faire il faut ouvrir le processus (avec OpenProcess) et à partir de ce moment la, vous pouvez lire des valeurs du jeu et également en écrire.

    Est-ce cela que vous voulez dire par s'attacher ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Justement je ne sais pas, je crois^^
    en procédant ainsi, si j'arrive à récupérer les valeurs du jeu, en théorie je n'aurais pas besoin de reconnaisance graphique des cartes ou je me trompe ?

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    En effet. Avec cette façon de procéder (Read/WriteProcessMemory) vous n'aurez pas besoin de reconnaitre les cartes.

    Mais si vous désirez utiliser emguCV comme dit plus haut, alors vous n'aurez pas besoin d'utiliser Read/WriteProcessMemory (ni de vous lier au processus).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    D'accord merci.

    Avez vous deja utilsé cette façon de procéder ?

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Oui.

    Je vous met ci-joint un code que j'avais fait en son temps pour apprendre justement à faire une partie de ce que vous souhaitez faire.

    Ce code (fait en VB6) affiche la position des mines et autres dans le démineurs de Windows XP.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Tres bien, merci
    Je pourrais voir comment les variables sont récupérer comme ça !

  10. #10
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    ATTENTION que pour trouver les variables comme vous dites, c'est assez spécial. En rélité il faut trouver leurs adresses en mémoire. Pour ca vous avez un excellent logiciel appelé Cheat Engine qui permet de rechercher une valeur dans la mémoire d'un processus et de filtrer la liste jusqu'à trouver la bonne valeur.

    Bien sur il fait bien plus que cela mais il pourra très certainement vous aider.
    Vous avez d'excellent tuto en francais ici si vous voulez.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    D'accord merci
    Il n'y a que ce moyen pour lire les valeurs du jeu ?

    La seule façon de remplacer la reconnaissance de cartes par emguCV est de le faire de cette façon la avec la lecture des variables ?
    Je vois mal comment cela peut se faire en fait

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Apparemment FindWindow ne marche pas avec les pages internet.
    je vais devoir utiliser emgucv pour les jeux sur navigateur et les process pour les applications.

    il n'est pas possible de se lier au processus d'un jeux sur internet n'est ce pas ?

  13. #13
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Pour une page internet, vous pouvez faire plus simple. Utiliser le composant WebBrowser directement dans votre application

    Edit: Sinon je pense que le plus simple pour ce que vous souhaitez faire, c'est que si votre bibliothèque détectant les cartes est performantes, c'est de l'utiliser sur le composant WebBrowser et ensuite vous n'aurez plus qu'à envoyer des commandes (comme click souris à tel position etc) au composant selon ce que vous aurez détecté et choisit de faire.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Même si ma detection n'est pas encore parfaite je pense que c'est ce que je vais faire.

    Je pensais qu'il était possible de faire un FindWindow sur le panel du jeux flash et de le deplacer sur le panel du windows forms.

    Du coup je ne pourrais pas faire autre chose à coté, ça m'étonnerait qu'on puisse se lier au processus du jeux flash. Le jeu doit forcément être une application si je ne me trompe pas

  15. #15
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Vous n'avez pas besoin de vous "attacher" à la fenêtre flash directement mais au navigateur car c'est le processus du navigateur qui lance le plugin flash (fichier .dll). Du coup, toute les variables du jeu se trouvent dans l'espace mémoire de votre navigateur.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    D'accord merci
    Et pour récupérer ces variables j'ai besoin du logiciel que tu m'as recommandé ?

  17. #17
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Désolé pour ce retard,

    Oui, il vous faudra trouver l'adresse mémoire de la variable que vous souhaitez lire/écrire

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Pas de soucis .

    J'aurais préférer éviter l'utilisation d'un autre logiciel mais si c'est pas possible autrement je ferais avec^^

  19. #19
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Cet autre logiciel ne sert uniquement qu'à rechercher l'adresse d'une variable en mémoire. Une fois que vous l'aurez trouvé, vous pourrez utiliser l'adresse mémoire en dur dans votre code et donc lors de votre Release, ne pas être dépendant de ce logiciel externe.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Ah d'accord, en fait l'adresse de la variable en mémoire reste la même ?
    si j'ouvre le navigateur avec le jeu lundi puis apres jeudi, l'adresse reste la même ?

Discussions similaires

  1. [Conseils] Developper Un Irc Bot
    Par PoiSon dans le forum IRC / mIRC
    Réponses: 4
    Dernier message: 11/11/2006, 15h04
  2. alt/title => bots
    Par C.M dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 01/04/2005, 16h01

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