2009-06-18 19 views
6

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

Hice lo mismo para las aplicaciones ordinarias (basado en MFC), así como aplicaciones .NET ya, pero lamentablemente nunca he desarrollado una aplicación en PowerBuilder a mí mismo, por lo general, estoy pensando en dos problemas en este punto:

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

  2. Si hay alguna API disponible, ¿quizás las aplicaciones PowerBuilder incluso exponen algún tipo de API habilitada para IPC que me permite 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 tendrá que inyectar una DLL en el proceso de la aplicación PowerBuilder y luego acceder al correr PowerBuilder VM para que pueda consultar por 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 trató de hacer esto ya?

Saludos,

  • Frerich

Respuesta

6

En primer lugar, la respuesta fácil: creo que lo que estás tratando de hacer se ha hecho, más o menos. Rex from Enable hace lo que creo que está buscando, pero IIRC por hablar con los desarrolladores, depende de los códigos integrados en la aplicación.

Lo que lleva a la sugerencia de que no creo que pueda hacer lo que creo que está tratando de hacer completamente de forma 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 WinAPIs? Olvídalo.

I creo He oído hablar de una API como la que está preguntando, pero nunca he oído hablar de otra persona que los fabricantes de herramientas de software de pruebas automatizadas puedan tener en sus manos. Si esto es cierto (y la calidad de esta información es similar a "lo escuché en el pasillo"), sospecho que podría haber problemas de seguridad en la aplicación al permitir que esto salga. (Sé és nunca quiere infectar a mi solicitud, o hurgar y descubrir mis secretos. sonrisa)

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

Admiro la idea. Desearía tener mejores noticias (aparte de que quizás Rex podría resolver tu problema sin los dolores de cabeza de hacerlo tú mismo). ¡Ahora estoy esperando aún más lo que pudieron liberar! sonrisa

Buena suerte,

Terry.

3

que acaba de crear una herramienta de este tipo, pero un poco engañados. Estaba a punto de hacer la misma pregunta en los grupos de noticias de PB. Mi solución se compone de dos partes: la herramienta

Spy-como - una aplicación independiente que como Spy ++, es decir, le permite arrastrar una diana sobre un control, utilizando funciones de la API de Windows (aunque escrito en PB).

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

Cuando el usuario selecciona un control, la herramienta espía busca primero su ventana que contiene 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. El control se ubica en la aplicación PB y sus detalles finalmente se envían a la herramienta espía, que los presenta al usuario.

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

Tengo que decir que su pregunta llega en un momento sorprendente. Ver this recent question of mine. Si estás interesado en la herramienta que he creado, envíame un comentario.

Cuestiones relacionadas