Spy ++ для приложений PowerBuilder - PullRequest
6 голосов
/ 18 июня 2009

Я пытаюсь написать инструмент, который позволяет мне проверять состояние приложения на базе PowerBuilder. Я думаю о чем-то вроде Spy ++ (или, что еще приятнее, «Snoop» в том виде, в котором он существует для приложений .NET), который позволяет мне проверять дерево объектов (и свойства объектов) некоторых графических интерфейсов PowerBuilder.

Я уже делал то же самое для обычных (на основе MFC) приложений, а также для приложений .NET, но, к сожалению, я никогда не разрабатывал приложение в PowerBuilder, поэтому на данный момент я обычно думаю о двух проблемах:

  1. Существует ли какой-либо API (предпочтительно на Java или C / C ++), который позволяет пройти через дерево визуальных объектов приложения PowerBuilder? Я немного прочитал о системе собственного интерфейса PowerBuilder, но похоже, что это предназначено для написания расширений PowerBuilder на C / C ++, которые затем можно вызывать из языка сценариев PowerBuilder, верно?

  2. Если есть какой-то доступный API - может быть, приложения PowerBuilder даже предоставляют какой-нибудь API-интерфейс с поддержкой IPC, который позволяет мне проверять состояние иерархии объектов PowerBuilder, не входя в процесс приложения PowerBuilder? Может быть, есть доступный интерфейс автоматизации, или что-то на основе COM - или может быть что-то еще?

Прямо сейчас у меня сложилось впечатление, что, вероятно, необходимо внедрить DLL в процесс приложения PowerBuilder, а затем получить доступ к работающей виртуальной машине PowerBuilder, чтобы я мог запросить ее для дерева объектов. Затем какой-то механизм IPC позволит мне перенести эту информацию из процесса приложения PowerBuilder.

Кто-нибудь имеет какой-то опыт с этим или может пролить свет на то, пытался ли кто-нибудь уже сделать это?

С уважением,

  • Frerich

Ответы [ 2 ]

6 голосов
/ 18 июня 2009

Во-первых, простой ответ: я думаю, что вы пытаетесь сделать, вроде как. Рекс из Разрешить делает то, что, как я думаю, вам нужно, но IIRC от общения с разработчиками зависит от ловушек кода, встроенных в приложение.

Это приводит к предположению, что я не думаю, что вы сможете делать то, что, как я думаю, вы пытаетесь сделать полностью извне из приложения. Вы можете взять дескрипторы окон с WinAPI и делать с ними некоторые базовые вещи, но не так много, как вы хотите. И получать информацию о DataWindows с WinAPI? Забудь это.

Я верю Я слышал об API-интерфейсе, подобном тому, о котором вы спрашиваете, но я никогда не слышал о том, чтобы кто-нибудь другой, кто может автоматизировать тестирование производителей программного обеспечения. Если это правда (и качество этой информации соответствует принципу «услышал ее в коридоре»), я подозреваю, что могут возникнуть некоторые проблемы с безопасностью приложения, позволяющие получить эту информацию. (Я знаю, , что вы никогда не захотите заразить мое приложение, или покопаться и узнать мои секреты. ухмылка )

Даже с перехватами в пространстве памяти PowerBuilder VM, я не знаю, как получить список объектов в памяти без некоторых перехватчиков инфраструктуры PowerScript (например, заполнение списка при каждом открытии и конструктора с помощью дескрипторов объектов). Получив дескриптор окна, вы можете легко просмотреть его управляющие массивы (и его управляющие массивы подклассов), чтобы получить список объектов в окне, но такие вещи, как дескрипторы переменных экземпляра NVO, будут проблематичными.

Я восхищаюсь этой идеей. Хотелось бы, чтобы у меня были хорошие новости (кроме того, что, возможно, Рекс мог бы решить твою проблему без головной боли, делающей это самостоятельно). Теперь я с нетерпением жду того, что Эран может выпустить! усмешка

Удачи,

Терри.

3 голосов
/ 18 июня 2009

Я только что создал такой инструмент, но немного обманул. На самом деле собирался задать тот же вопрос сам в группах новостей PB. Мое решение состоит из двух частей:

Spy-like tool - автономное приложение, которое, например, Spy ++, т. Е. Позволяет перетаскивать цель на элемент управления, используя функции Windows API (хотя и написанные на PB).

Внутренняя инфраструктура для целевых приложений - расположена у предка всех окон приложения. Получив определенный дескриптор (windows), он проходит через массив Control [] и ищет элемент управления, дескриптор которого совпадает с заданным. При необходимости он также возвращается в контейнеры управления, такие как tab.

Когда пользователь выбирает элемент управления, инструмент-шпион сначала ищет его содержащее окно, используя Windows API. При обнаружении инструмент отправляет в это окно пользовательское сообщение, которое затем обрабатывается инфраструктурой приложения. Затем элемент управления находится в приложении PB, и его подробности наконец отправляются обратно в шпионский инструмент, который представляет их пользователю.

Я подозреваю, что часть инфраструктуры может быть заменена какой-то внешней вещью, поскольку я видел инструменты, которые, кажется, способны это сделать (Visual Expert, QTP). Однако у меня не было времени для дальнейших исследований, и это решение было относительно легко разработать.

Я должен сказать, что ваш вопрос возник в неожиданное время. См. мой недавний вопрос . Если вам интересен инструмент, который я создал, напишите мне.

...