2009-08-03 11 views
7

Quiero crear un programa o utilizar un programa que leerá los valores de memoria de otra aplicación. ¿Alguien sabe de una aplicación/biblioteca que hará esto?¿Cómo se pueden leer los valores de una aplicación abierta en Windows?

La aplicación de destino es this. Me gustaría leer los valores de la tasa de cambio de ella.

Soy un programador de C# experimentado, pero nunca he trabajado con la API de Win32/user32, que es con lo que asumo que tendré que lidiar para llevarlo a cabo.

Cualquier ayuda que me lleve en la dirección correcta es muy apreciada.

Actualización: me las arreglé para usar Spy ++ para obtener el identificador de ventana, así que estoy seguro de que puedo obtener los valores de alguna forma.

Respuesta

2

Por lo general, una aplicación crea controles en un cuadro de diálogo de forma consistente, con la misma ID, el mismo orden, etc., por lo que encontrar un control programáticamente es bastante simple. Usando Spy ++ encuentre la ID del control y luego puede buscar en las ventanas creadas por la aplicación para el control deseado. No estoy familiarizado con la aplicación en cuestión, no puedo dar detalles, pero si Spy ++ muestra el valor que desea, es probable que no sea difícil obtener el valor en su código.

¿En qué tipo de control se muestra el valor? ¿Es posible que pueda usar GetDlgItemText para obtener el valor una vez que tenga el identificador de control y la ventana principal? Para obtener la ventana principal intente usar EnumWindows.

+0

No pude obtener el valor deseado, pero pude obtener un control para el contenedor donde estaban las diferentes tasas de cambio. Los únicos controles que aparecían en el contenedor eran los cuadros combinados para seleccionar un valor (tamaño de lote). –

+0

Al usar Spy ++, ¿aparecen todos los controles debajo del mismo elemento primario? –

+0

Los únicos controles que veo son los cuadros combinados para seleccionar el tamaño del lote, que se muestran justo al lado de los dígitos que quiero leer, pero los controles de dígitos no se muestran en spy ++. ¿Alguna sugerencia sobre cómo llegar a ellos? –

1

¿Has mirado en AutoIT o AutoHotKey? Ambas opciones de código abierto tienen capacidades bien documentadas para leer texto de las ventanas de la aplicación (y enviarles pulsaciones de teclas o clics de ratón).

AutoIT es muy fácil de usar y está bien documentado. Un ejemplo de texto de lectura desde una ventana sería:

$text = WinGetText("title of window", "") 
MsgBox(0, "Text read was:", $text) 

Esto puede ser compilado en un archivo ejecutable.

0

Es posible eliminar elementos creados con controles de Windows nativos; si ese es el caso, debería poder ver los controles usando Spy ++. Pero algunas veces los controles se implementan "a mano" y no hay forma de eliminarlos (por ejemplo, algunos juegos de herramientas gráficas de Java juegan directamente con los gráficos, por lo que todo el día no tiene sentido desde el exterior, o incluso se implementan algunos menús de Office). sin usar el control del menú).

La API de accesibilidad de Windows es una forma posible de eliminar por pantalla los valores; compruebe si "Narrador", el lector de pantalla que viene con Windows, puede leer en voz alta su aplicación de destino.

Cuestiones relacionadas