| ID | Asunto | Fecha | Nick | |
| 40924 | Interactuar con otra aplicacion. | 29/04/08 09:47 | angel_debat | |  |
Hola. Mi nombre es Àngel y trabajo como informático Freelance.
Un cliente me ha pedido que le automatice un programa que el compró a una empresa.
El programa se llama Auto Signal, pero eso es lo de menos…
Lo que quiere es que, al apretar un botón de mi aplicación, este programa abra un archivo, coja los datos y proporcione una serie de gráficos.
Normalmente, esto se hace apretando botones de este programa en cuestión, pero mi cliente quiere que se haga automáticamente.
Me puesto en contacto con el proveedor pidiéndole algún ejemplo de aplicación en Vb.net que interactúe con su programa, o bien, algunos comandos que pudiese utilizar a través de la línea de comandos. Pero no he tenido respuesta…
Mi pregunta es: Puedo pasarle parámetros desde mi aplicación en Vb.net de alguna manera?
Por Internet, he encontrado consejos que no acabo de entender como llevar a cabo, ya que mis conocimientos en programación tampoco son muy altos:
Insertar una DLL en el espacio de direcciones de la otra aplicación.
Enviar al bucle de mensajes la secuencia adecuada de mensajes WIN32 para que la aplicación actúe como tú quieras.
Capturar el bucle global de mensajes del equipo mediante una la inserción de una DLL global.
Enviar una secuencia de WM_MOUSECLICK para que se abra la ficha correspondiente, luego WM_KEYCHAR con los TAB y los textos a rellenar.
Interactuar con el registro.
Interactuar con la ventana activa…
Agradeceré cualquier ayuda.
Muchas gracias.
Àngel Gimeno. |
|
| ID | Asunto | Fecha | Nick | |
| 40929 | Re: Interactuar con otra aplicacion. (Resp: 40924) | 29/04/08 11:41 | lmiguelonl | | |
hola, en esta misma web tienes como abrir otras aplicaciones y pasarles algun parametro: http://www.elguille.info/colabora/puntoNET/ar_abrir_aplicacion.htmPero claro...hacer que en esa aplicacion se pulse un boton....eso ya se me escapa. Lo mismo se podria enviar una combinacion de teclas para hacer que el boton se pulse, por ejemplo si tu aplicacion se abre con el foco en el boton adecuado pues le pasas un "enter", si tienes que moverte por 2 botones pues le pasas 2 tabuladores y un enter... pero vamos esto es una idea muy " a bote pronto ", no estoy muy puesto aun en .NET. Suerte
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 40930 | Re: Interactuar con otra aplicacion. (Resp: 40929) | 29/04/08 12:02 | angel_debat | | |
Hola. Gracias por tu respuesta.
Si. Eso ya lo se hacer. Lo malo es, que parámetros o argumentos pasarle al programa...
Àngel
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 40961 | Re: Interactuar con otra aplicacion. (Resp: 40924) | 29/04/08 23:37 | jomabova | |  |
Hola Angel. Si no eres experto en el uso del Win32 y no has programado directamente los WM_... etc deberias intentar una solución mas sencilla, luego te explico. Lo de inyectar código en los procesos o en las dlls, ...
Normalmente hay una forma muy sencilla de interactuar con un programa que se carga en modo gráfico, aunque no siempre da buenos resultados, eso depende de la aplicación y como esté programada. A lo que vamos.
Levantas ese programa y haces todo el proceso manual hasta generar el resultado que pretendes. La única salvedad es que debes hacerte una plantilla con todas las teclas que vas usando. Ejemplo: suponiendo que los menús se puedan accder con métodos abreviados de teclado: Alt+A -> menú archivo Ctrl+O Abrir, etc., en el caso de que haya opciones que no tengan una tecla rápida, tendrás que contar los desplazamientos de tecla arriba o abajo + el enter de la opción. Cuando tengas la plantilla diseñada, cierras el programa y te haces una aplicación de consola básica que haga lo siguiente: Crear un proceso nuevo que lance la aplicación en cuestión. obtener el handle de la ventana principal. utilizar el método SendKeys y mandar las secuencias que guardaste. las teclas las envias en bloques coherentes. Lo puedes hacer en modo depuración y así vas viendo como funciona la ventana.
Con unas pocas pruebas podrás depurar los fallos y ponerlo en orden. Lo mas probable es que funcione correctamente o casi.
Ya nos dirás. Saludos.
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 40966 | Re: Interactuar con otra aplicacion. (Resp: 40961) | 30/04/08 07:24 | lmiguelonl | | |
Si que deberia funcionar...
Yo hice una aplicacion de consola que abre el firefox, va a una web y una vez alli enviando tabuladores y teclas de cursor y demas la pagina hacia automaticamente lo que se supone que tenia que hacer. Eso si tuve que poner unos delays entre teclas de un par de segundos para darle "vidilla" y que tuviera tiempo de hacer las cosas bien.
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 41015 | Re: Interactuar con otra aplicacion. (Resp: 40924) | 02/05/08 09:10 | angel_debat | | |
Gracias jomabova. Me faltaba ese pequeño empujón que me has dado y lo he solucionado… Te pongo los pasos que he seguido por si otro forero se encuentra con el problema. Según tu respuesta: Debo manipular la aplicación con el teclado anotando las teclas que pulso. Debo capturar el Handle de la aplicación. He ido a http://www.elguille.info/NET/vb6anet/capturarTextoVentanaActiva.htmY me he bajado este ejemplo que me captura el Handle, (que hasta ahora no sabía lo que era) Deduzco que es el número de turno que asigna Windows a esa ventana… Aquí he aprendido como activar una ventana “x”: http://www.elguille.info/NET/dotnet/previnstance.htmDespués, tal como has dicho, solo era cuestion de poner: SendKeys.Send("xxxxxxx") En mi aplicación. Para saber la lista de keys, me he ido a aquí: http://www.developerfusion.co.uk/show/57/Si alguien quiere más información, este es mi mail: [email protected]Gracias a ti también Miguelón. Saludos.
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 42382 | Re: Interactuar con otra aplicacion. (Resp: 40924) | 30/06/08 13:29 | angel_debat | | |
Hola Jomabova.
Ya he acabado la aplicación para la que os realicé esta consulta.
Lo que me planteo ahora es:
Habría alguna manera de enviar una secuencia de teclas a una ventana que "NO FUERA LA ACTIVA"?
Hasta ahora, se como saber si una aplicación está en memoria y obtener su handles. Puedo activarla y enviarle Sendkeys. Pero, sin estar activa sería posible? Mediante su nombre o handles??
Muchas gracias por tu tiempo...
Àngel
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
| ID | Asunto | Fecha | Nick | |
| 42408 | Re: Interactuar con otra aplicacion. (Resp: 40924) | 01/07/08 13:27 | angel_debat | | |
Hola. He encontrado una manera que creo que puede funcionar. Mediante SendMessage. He hecho un código muy interesante para probarlo pero no funciona. Como me parece un tema de interés, he creado un nuevo post: http://foros.elguille.info/Mensajes.aspx?ID=42407Gracias. Àngel
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |