Pregunta

Estoy tratando de escribir una herramienta que me permita inspeccionar el estado de una aplicación basada en PowerBuilder. En lo que estoy pensando es en algo como Spy ++ (o, incluso mejor, 'Snoop' como existe para aplicaciones .NET) que me permite inspeccionar el árbol de objetos (y las propiedades de los objetos) de alguna GUI basada en PowerBuilder.

Ya hice lo mismo para las aplicaciones ordinarias (basadas en MFC) y para las aplicaciones .NET, pero desafortunadamente nunca desarrollé una aplicación en PowerBuilder, así que generalmente estoy pensando en dos problemas en este punto:

  1. ¿Hay alguna API (preferiblemente en Java o C / C ++) disponible que permita atravesar el árbol de objetos visuales de una aplicación PowerBuilder? Leí un poco sobre el sistema de interfaz nativa de PowerBuilder, pero parece que esto está destinado a escribir extensiones de PowerBuilder en C / C ++ que luego se pueden llamar desde el lenguaje de script de PowerBuilder, ¿verdad?

  2. Si hay alguna API disponible, ¿quizás las aplicaciones PowerBuilder expongan algún tipo de API habilitada para IPC que me permita inspeccionar el estado de una jerarquía de objetos PowerBuilder sin estar dentro del proceso de la aplicación PowerBuilder? ¿Tal vez hay una interfaz de automatización disponible, o algo basado en COM, o tal vez algo más?

En este momento, mi impresión es que probablemente necesite inyectar una DLL en el proceso de la aplicación PowerBuilder y luego obtener acceso a la máquina virtual PowerBuilder en ejecución para poder consultar el árbol de objetos. Algún tipo de mecanismo de IPC me permitirá transportar esta información fuera del proceso de la aplicación PowerBuilder.

¿Alguien tiene alguna experiencia con esto o puede arrojar algo de luz sobre si alguien ya intentó hacerlo?

Saludos,

  • Frerich
¿Fue útil?

Solución

Primero, la respuesta fácil: creo que lo que intentas hacer se ha hecho, más o menos. Rex de Enable hace lo que creo que buscas, pero IIRC de hablar con los desarrolladores, depende de los ganchos de código integrados en la aplicación.

Lo que lleva a la sugerencia de que no creo que puedas hacer lo que creo que estás tratando de hacer de forma completamente externa desde la aplicación. Puede tomar identificadores de ventana con WinAPI y hacer algunas cosas básicas con eso, pero no tanto como desee. ¿Y obtener información sobre DataWindows con WinAPI? Olvídalo.

Creo que he oído hablar de una API como la que está preguntando, pero nunca he oído hablar de nadie más que los fabricantes de herramientas de software de pruebas automatizadas lo tengan en sus manos. Si esto es cierto (y la calidad de esta información está en la línea de "lo escuché en el pasillo"), sospecho que podría haber algunos problemas de seguridad de la aplicación al permitir que esto salga a la luz. (Sé que nunca querrás infectar mi aplicación, o hurgar y descubrir mis secretos. sonrisa )

Incluso con ganchos en el espacio de memoria de PowerBuilder VM, no soy consciente de poder obtener una lista de objetos en la memoria sin algunos ganchos de marco de PowerScript (por ejemplo, llenar una lista en cada abierto y constructor con identificadores de objetos). Una vez que tenga un identificador de ventana, puede atravesar fácilmente sus matrices de control (y sus matrices de control de subclases) para obtener una lista de objetos en la ventana, pero cosas como identificadores para variables de instancia de NVO serían problemáticas.

Admiro la idea. Desearía tener mejores noticias (aparte de que quizás Rex pueda resolver su problema sin los dolores de cabeza de hacerlo usted mismo). ¡Ahora espero aún más lo que podrían lanzar! grin

Buena suerte

Terry.

Otros consejos

Acabo de crear una herramienta así, pero hice trampa un poco. Estaba a punto de hacerme la misma pregunta en los grupos de noticias de PB. Mi solución consta de dos partes:

Herramienta similar a un espía : una aplicación independiente que le gusta Spy ++, es decir, le permite arrastrar un objetivo a un control, utilizando las funciones API de Windows (aunque escritas en PB).

Infraestructura interna para aplicaciones de destino : ubicado en el antecesor de todas las ventanas de la aplicación. Una vez que se le da un determinado controlador (windows), pasa por la matriz Control [] y busca el control cuyo controlador coincide con el dado. Si es necesario, también se repite en contenedores de control como pestañas.

Cuando el usuario selecciona un control, la herramienta espía busca primero la ventana que lo contiene utilizando la API de Windows. Cuando se encuentra, la herramienta envía un mensaje personalizado a esa ventana, que luego es manejada por la infraestructura de la aplicación. Luego, el control se encuentra en la aplicación PB, y sus detalles finalmente se envían de vuelta a la herramienta de espionaje, que los presenta al usuario.

Sospecho que la parte de infraestructura se puede reemplazar con algo externo, ya que he visto herramientas que parecen ser capaces de hacerlo (Visual Expert, QTP). Sin embargo, no he tenido tiempo de investigar más, y esta solución fue relativamente fácil de desarrollar.

Tengo que decir que su pregunta llega en un momento sorprendente. Consulte esta reciente pregunta mía . Si está interesado en la herramienta que he creado, envíeme un comentario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top