2009-01-05 21 views
9

Es probable que pronto esté trabajando en algunos proyectos en los que necesitaré tomar datos de un archivo e ingresar esos datos mediante programación en otra aplicación de terceros (no la mía). Un problema: no tengo idea de cómo hacer esto. Tendré que ingresar datos (como las horas en una hoja de tiempo, por ejemplo). ¿Alguien puede dirigirme en la dirección correcta para adquirir esta habilidad?Cómo interactuar con una aplicación mediante programación

ESPECIFICACIONES ADICIONALES: Escribí la publicación original tarde en la noche, por lo que puede que no haya sido tan detallada como debería haberlo hecho. Aquí hay un ejemplo: Mi cliente tiene una aplicación ERP que usan para recopilar marcas de tiempo de los trabajadores de línea mientras realizan sus trabajos y obtienen proyectos a lo largo del día. Esta aplicación NO tiene una API que pueda usar para alimentar datos. He oído hablar de un tipo que podía insertar datos en la pantalla en las ventanas y controles de esta aplicación mediante programación, de manera que los datos podían recopilarse, por ejemplo, en una hoja de cálculo de Excel y luego cargarse efectivamente en esta aplicación. Una especie de raspado de pantalla inverso. No es bonito como lo sería una API, pero funciona.

He visto que la aplicación interactúa con otras aplicaciones de forma similar. Un buen ejemplo en el que puedo pensar es SnagIt, la utilidad de captura de pantalla. Puede ordenar que capture una ventana en una aplicación en particular, y cuando mueva el mouse por esa ventana, los controles debajo del puntero se mostrarán en rojo para indicar qué control capturará para usted. Creo que es interesante, y probablemente esté a un paso de poder escribir el texto en tal control.

Gracias por los comentarios y respuestas hasta el momento, estoy persiguiendo a todos.

+0

¿Desea ingresar datos mediante programación en la GUI de una aplicación de terceros? – Artelius

+0

@Mike: Puede que necesite aclarar sus requisitos ... –

+0

La respuesta de Frederick es buena, pero la pregunta necesita mejores requisitos, como dice Mitch. – kenny

Respuesta

8

Usted puede ser capaz de automatizar con un guión AutoIt. Este es un lenguaje de scripting simple que oculta algunas de las complejidades de enviar mensajes a ventanas y controles.

+1

Esto parece exactamente lo que tenía en mente. Sorprendentemente, ¡es Freeware! Si funciona tan bien como espero, una donación estará en orden. –

6

Las diferentes aplicaciones le permiten controlarlas programáticamente de diferentes maneras. Los dos enfoques más comunes son:

1) Algunas aplicaciones exponen los argumentos de la línea de comandos. Ejemplo:

c:\> someapp.exe arg1 arg2 

Usted puede llamar a este tipo de aplicaciones desde un programa en C++ con una llamada como esta:

System("C:\\>someapp.exe arg1 arg2"); 

2) Otras aplicaciones pueden exponer mucho más poderoso, API orientada a objetos. Por ejemplo, Microsoft Excel le permite programar mediante el uso de la propia aplicación como un objeto en su programa en C#:

Excel.Application excelApp = new Excel.App() 

Una vez que tenga el objeto aplicación, puede llamar a métodos en que para controlar su comportamiento. Puede, por ejemplo, abrir un nuevo archivo de Excel con una llamada posterior de esta manera:

excelApp.Workbooks.Open("\\Somefile.xls", ...); 

Para cualquier aplicación tercer partido que está tratando de control, se le va a tener que leer su documentación en cuanto a cómo te deja hacer eso. La información sobre cómo programar Excel, por ejemplo, se puede encontrar en here.

0

Una vez hice algo como esto cuando una aplicación de Windows estaba controlada por una aplicación web. Usé una gran cantidad de API de Win32 para eso. Si su aplicación es similar, busque el controlador remoto Winamp de fuente abierta para principiantes.

3

Puede ser muy difícil si la aplicación no está diseñada para interactuar. Tendrá que enviar eventos simulados (para simular que el mouse estaba haciendo ciertas cosas, por ejemplo). Una forma de hacerlo es escribir un controlador de mouse que no se conecte a un mouse real. Pero, como digo, depende de la aplicación.Las aplicaciones con bases de usuarios más grandes a menudo tienen API para permitir la interacción programática, o tienen capacidades de scripting incorporadas (por lo que puede hacer que la aplicación use su código en su lugar).

0

O si quieres ser aún más "hacky", empezar a leer la memoria de programa e inyectar datos directamente. : P

Pero eso puede ser muy complejo, ya menudo no trabajará en absoluto debido a la forma en que el programa utiliza la memoria.

0

No es la forma más bonita de hacerlo, pero he visto algunas aplicaciones que utilizan el portapapeles para hacer cosas como esta. Desafortunadamente, es probable que también requiera intervención manual, ya que probablemente no tenga una forma de hacer que la aplicación tire de/push de forma programática al portapapeles.

Cuestiones relacionadas