J'ai écrit un certain nombre de bots à un moment ou à un autre (des jeux Pogo aux Yohoho Puzzle Pirates). Pour Windows, il faut soit envoyer des événements Win32 pour simuler les mouvements de la souris, soit usurper les messages de bas niveau envoyés entre Windows lorsque la souris est réellement cliquée. Cela dépend en grande partie de la façon dont le programme réagit (en acceptant le message avec les coordonnées ou, dans le cas de Java, en lisant immédiatement les coordonnées de la souris). La partie "automatisation" implique généralement la lecture de l'écran et l'écriture d'heuristiques ou d'algorithmes pour déterminer l'état, mais peut également être aussi agréable que le reniflage de paquets (beaucoup d'informations dans les mauvaises implémentations de poker) ou aussi difficile que la lecture directe d'emplacements de mémoire. Il s'agit d'un "domaine" assez vaste et peu documenté, car il est très rentable et facile d'accès.
Envoi de l'entrée
C/C++ (sous Windows)
Pour les clés, essayez CodeProject :
http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx
Et des messages :
http://www.codeproject.com/KB/threads/sendmsg.aspx
Le mieux est d'apprendre à envoyer des messages à l'aide de l'API Win32, puis d'utiliser un logiciel comme Spy++ ou ses dérivés pour "rétroconcevoir" la manière dont les pressions sur les touches et les mouvements de la souris sont envoyés à la fenêtre.
Java
Java dispose d'une classe Robot étonnamment portable, capable de.. :
- Lire les pixels de l'écran.
- Contrôler la souris.
- Envoyer les clés.
Je vous conseille de l'essayer si vous cherchez un moyen rapide et facile.
Logique de base
Ce processus est décrit en détail ailleurs sur l'internet, mais la plupart des robots suivent un flux de programme état-machine simple. Vous lisez l'écran (ou les paquets, ou la mémoire), vous déterminez votre "état" en fonction de vos lectures et des données antérieures, vous effectuez des calculs et vous renvoyez le résultat au programme.
La lecture de l'écran peut être difficile, mais elle peut être facilitée si vous considérez que, bien souvent, quelques pixels "chanceux" par rapport à la fenêtre vous donneront une idée de l'état dans lequel se trouve le programme. Le processus de recherche de ces pixels peut être automatisé.