bots - que - ¿Cómo puede un programa controlar otro programa?
que son bots en instagram (12)
Bots, ¿cómo funcionan? ¿Le dicen al videojuego que se presionó una tecla o se hizo clic en el mouse?
Si no hay una manera de que su programa indique a otro programa, se presionó una tecla? Me gustaría hacer un programa para vencer a algún juego. Entonces, cualquier recurso o ejemplo es apreciado.
Actualización: Entonces, una manera es emular las pulsaciones de teclas, entonces, ¿cuáles son algunos métodos para hacer esto (en cualquier idioma)?
Algunos programas (como los que te gustan en un MMORPG) simplemente están emulando las pulsaciones de teclas. Una herramienta para hacer esto es AutoIt .
En cuanto a los bots que realmente juegan los juegos ellos mismos, realmente no he hecho nada con ellos, pero supongo que usarían algún tipo de conjunto predefinido de acciones, tal vez una heurística, pero no probable.
Creo que AutoIt es un excelente lenguaje para hacer este tipo de software. Aunque no lo he usado para construir bots, enviar clics y claves fue muy fácil.
Cuando dices "controlar un programa", piensa en cómo se controlan los programas. La mayoría acepta entrada de teclado / mouse.
Si escribe un programa para simular la entrada de teclado / mouse, ahí lo tiene.
Un corolario de esto sería que si un programa acepta argumentos pasados a través de un cuadro de entrada, escriba un programa para enviar argumentos como si hubieran sido enviados a través de un cuadro de entrada.
Así es como funcionan todos los bots. Espero que arroje algo de luz para ti!
Editar: Así es como funciona la gran mayoría de los bots :-)
Depende mucho del juego. Por ejemplo, creé un bot para Travian (que es un juego en línea) que utilizaba internet explorer activeX para automatizar movimientos. Llevé a cabo la aplicación en c # y hacer que cosas tomaran aproximadamente 30 minutos. Es sencillo llamar a los métodos en activeX y hacer cosas como llenar campos de texto o hacer clic en los botones. Para iniciar sesión, por ejemplo, utilicé lo siguiente:
var inputs = web.Document.GetElementsByTagName("input").
Cast<HtmlElement>();
var nume = inputs.First(h => h.GetAttribute("type") == "text");
var pass = inputs.First(h => h.GetAttribute("type") == "password");
var login = inputs.First(h => h.GetAttribute("type") == "image");
var form = web.Document.GetElementsByTagName("form")[0];
nume.SetAttribute("value", "user");
pass.SetAttribute("value", "pass");
login.InvokeMember("Click");
Para aquellos juegos que son cosas de escritorio se vuelven más complicados. Windows permite que una aplicación envíe mensajes a otra aplicación, así que supongo que podrías usar eso para enviar mensajes a un juego (aunque esto no funciona para juegos que usan DirectX como entrada, no lo sé)
El mayor defecto en este concepto no es la entrada, sino la salida del juego. Tu bot no puede simplemente presionar teclas al azar, necesita saber qué está "sucediendo". Muy pocos juegos te permiten consultar estos datos, lo que dejaría a tu bot resolver un problema muy complicado: convertir 60 cuadros por segundo de datos visuales 2D en un espacio virtual.
En realidad, existen juegos que no solo permiten a los jugadores bot, sino que los alientan. Open RTS es uno de esos, pero también hay otros más simples como GUN-TACTYX y crobots que son buenos puntos de partida.
Hay un par de tipos de bots. Por lo que recuerdo cuando solía jugar CS (hace mucho, mucho tiempo)
Algunos bots usan las bibliotecas de la aplicación para inspeccionar el entorno (el mapa, donde los jugadores están, etc.). Los bots también usan la biblioteca para controlar el movimiento. Dudo que haya muchas implementaciones de bot que invoquen mensajes de mouse para decirle al juego cómo moverse, etc.
Algunos bots emulan el protocolo de nivel de aplicación (si es multijugador). Entonces, en otras palabras, el juego ni siquiera necesita ejecutarse. Un bot puede funcionar en un juego virtual.
Voy a ir en contra de lo que ha sugerido otro afiche: escribir un bot de juego es probablemente un ejercicio más valioso que jugarlo, y tener curiosidad sobre cómo funcionan es una buena señal. :)
He escrito un montón de bots en un momento u otro (desde juegos de Pogo hasta Yohoho Puzzle Pirates). En el caso de Windows, normalmente va a enviar eventos Win32 para simular movimientos del mouse o falsificar los mensajes realmente de bajo nivel que se envían entre ventanas cuando se hace clic en el mouse. Mucho depende de cómo reaccione el programa (aceptando el mensaje con las coordenadas o, en el caso de Java, leyendo inmediatamente las coordenadas del mouse). La parte de "automatización" generalmente implica leer la pantalla y escribir heurísticas o algoritmos para determinar el estado, pero también puede ser tan agradable como el rastreo de paquetes (mucha información allí en implementaciones pobres de póker) o tan raro como leer las ubicaciones de memoria directamente. Un "campo" bastante grande, y poco documentado, ya que es bastante rentable y no es difícil entrar.
Envío de entrada
C / C ++ (en Windows)
Para las claves, pruebe CodeProject:
http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx
Y mensajes:
http://www.codeproject.com/KB/threads/sendmsg.aspx
Su mejor opción es aprender a enviar mensajes utilizando la API de Win32, luego use algo como Spy ++ o sus derivados para "realizar ingeniería inversa" de cómo se envían KeyPresses y los movimientos del mouse a la ventana.
Java
Java tiene una clase de Robot increíblemente portátil que es capaz de:
- Lee píxeles de la pantalla.
- Controla el mouse
- Enviar claves.
Daría una oportunidad si lo estás buscando rápido y fácil.
Lógica básica
Esto se describe en otra parte de Internet en profundidad, pero la mayoría de los bots siguen un flujo de programa de máquina de estado simple. Usted lee la pantalla (o paquetes, o memoria), descubre en qué estado se encuentra en función de sus lecturas y datos pasados, haga cálculos y envíe el resultado nuevamente al programa.
Leer la pantalla puede ser difícil, pero puede ser más fácil si considera que muchas veces, hay unos pocos píxeles "afortunados" relativos a la ventana que le darán una idea de en qué estado se encuentra el programa. El proceso de encontrar estos píxeles se puede automatizar.
Los Bots actuarán como clientes del juego (servidor). Luego, pueden enviar datos apropiados tal como un usuario puede enviar manualmente. El bot (cliente) analizará los datos del servidor ("alguien está a punto de atacar desde la izquierda"), etcétera. El cliente debe poder calcular el mejor movimiento y enviar los datos apropiados al servidor para ejecutarlo.
No estoy seguro si esto funcionará con todos los juegos.
Para esto necesitas saber programación. Sin embargo, hay programas que le permiten programar con medios visuales. Para ellos, no es necesario que puedas programar. Un ejemplo es el programa Kibor. Está diseñado específicamente para sus propósitos y tiene un editor visual con el que puede crear bots con diagramas de bloques. Descripción del programa Kibor
Tiene muchas funciones listas para bots. Incluso hay un módulo de reconocimiento de texto incorporado Screenshot Kibor. Reconocimiento de texto
Puede emular los movimientos / clics del mouse y la entrada del teclado en Java con la clase Robot . También le permite tomar capturas de pantalla.
Tengo entendido que la mayoría de los bots de juegos de alta gama usan llamadas al sistema para mapearse en el espacio de memoria del cliente del juego, aplicar ingeniería inversa a su diseño y manipular directamente las variables internas del programa del cliente. Eso es mucho más trabajo de lo que estaría por diversión.
Un robot como el que describes simplemente emulará pulsaciones de teclas y movimientos / clics del mouse, por lo que el juego no puede decir si un humano está jugando u otro programa. No tendría que interactuar con el juego en absoluto.