2009-05-09 19 views
6

Estoy haciendo un bot para un juego Flash, y he descubierto cómo importar todas las funciones AutoIt en mi código C#.Enviando mensajes a un juego Flash con C# y AutoIt

string title = "Minesweeper"; 
string full = auto.WinGetTitle(title,""); 
string handle = auto.WinGetHandle(full, ""); 
if (auto.WinExists(full, "") == 1) 
    textBox1.Text = "window exists"; 
addressBox.Text = full; 

for (int r = 1; r < 40; r++) 
{ 
    auto.ControlClick(full, "", "", "left", 2, r * 10, r * 10); 
    //auto.ControlClick(handle, "", "", "left", 2, r * 10, r * 10); 
} 

(estoy bastante seguro de la descomentada debe ser el que tenga el mango y viceversa, pero esto funciona para Minesweeper.)

Así funciona para Buscaminas y no requiere que sea la ventana activa. Cuando trato de hacerlo funcionar en mi juego Flash, se requiere que la ventana del Explorador de Internet   sea la activa. ¿Esto es algo que requiere Flash o hay algo adicional que podría hacer para que funcione cuando el juego se minimiza?

Esto no tiene que hacerse con las importaciones de AutoIt. Intenté SendMessage desde user32 en un punto también, pero eso no funcionó en absoluto para el contenido Flash.

Acabo de probar esto en un sitio web al azar en lugar de un sitio Flash o Buscaminas y por alguna razón el código funciona si lo ejecuto desde el programa de secuencias de comandos AutoIt, pero no de mi programa en C# ...

20 de junio de 2012: Estoy bastante seguro de que esto tiene algo que ver con la forma en que se pasa el mango. He hecho algunas pruebas llamando a un archivo EXE de AutoIt y usando el identificador que obtengo del código C# como argumento, tengo que agregarle un 0x, y también dentro del código AutoIt tengo que convertirlo de una cadena a un HWnd, por lo que podría ser algo, en cuyo caso no sé qué hacer ya que la función importada se basa en una entrada de cadena para el manejador.

+0

¿Cómo exportó funciones autoit a C#? Tengo curiosidad. –

+0

http://www.lancelarsen.com/Blog/tabid/72/EntryId/48/AutoIt-C-Helper-Library.aspx Hay un sitio con recursos donde alguien ha realizado una clase importando las funciones de la biblioteca DLL. Pero creo que si solo incluye la biblioteca, no necesariamente necesita usar esa clase que creó. Lo digo porque su clase de ayuda no incluye todas las funciones como importaciones pero de todos modos puede acceder a todos los métodos de autoit. –

Respuesta

3

Algo que puede querer tratar de descartar el manejo de ventanas y problemas de manejo de variables. No debería ser necesario utilizar WinGetTitle para que el título de la ventana "Minesweeper" funcione correctamente. De acuerdo con mi herramienta AutoIt v3 Window Info en Windows 7, el título y la clase de la ventana Minesweeper son ambos Minesweeper. Tan difícil de codificación

auto.ControlClick ("[TITLE: Minesweeper; CLASE: Minesweeper], "", "", "izquierda", 2, r * 10, r * 10);

podría funcionar. para más información sobre cómo funciona ver Descripción Ventana avanzada en el archivo de ayuda AutoIt. Si este aspecto todavía no está funcionando hasta WinTitleMatchMode en el archivo de ayuda. se le permite establecer algunas reglas para indulgencia en la coincidencia de título de ventana que podría hacer esto más fácil para usted.

AutoIt X es la versión de control DLL/COM de AutoIt, así es como agregaría AuotIt a cualquier idioma que tenga compatibilidad con DLL/COM. En caso de que alguien más se estuviera preguntando how you would use AutoIt in C#. Desafortunadamente, AutoIt X a menudo se queda atrás en el desarrollo y las pruebas del idioma principal. Aunque no tiene ninguna razón para pensar que su problema es causado por un error que acaba de dar algunos antecedentes sobre el proyecto AutoItX. Si aún no lo ha hecho, debe publicar una copia de esta pregunta en el foro ActiveX/COM Help and Support (AutoItX). Una de las mejores cosas de AutoIt en mi experiencia a lo largo de los años es la comunidad (que no se ha movido mucho aquí). Esa sección particular del foro es frecuentada por algunos de los desarrolladores del lenguaje que estarían encantados de ayudar.

En cuanto a su 20 de junio nota, AutoIt trata todas las variables como cadenas hasta que detecta que es algo especial. No sabe que un valor es hexadecimal a menos que comience con el 0x que mencionaste. Esto me ha causado todo tipo de problemas extraños en el pasado. En varias ocasiones tuve que agregar cero a una variable para que AutoIt la evaluara correctamente después. Esto no ocurre a menudo con AutoIt3, sino solo algo a tener en cuenta.

Si necesita un código de referencia de AutoIt con muchos miembros del AutoIt forum have made Minesweeper bots, puede verificar y posiblemente ver algo útil.

+0

gracias Definitivamente voy a investigar esos recursos Solo estaba usando un dragaminas para aprender, y esto aún no resuelve mi problema con el juego flash. Pero voy a hacer un poco más de retoque con lo que me has mostrado –

+0

bueno, el tiempo está por terminar, así que te estoy dando la recompensa aunque no estoy completamente satisfecho Tenía la esperanza de descubrir cómo hacer clic en un webbrowser, ya podría hacerlo en dragaminas, como expliqué Pero la tuya fue la mejor de las respuestas disponibles gracias –

1

Asegúrate de ejecutar tu programa C# como administrador. Esta es la única diferencia que puedo ver para que un método funcione y el otro no.