7

我正在尝试编写一个工具来检查基于 PowerBuilder 的应用程序的状态。我在想的是像 Spy++(或者,更好的是,'Snoop',因为它存在于 .NET 应用程序)之类的东西,它可以让我检查一些基于 PowerBuilder 的 GUI 的对象树(和对象的属性)。

我已经对普通(基于 MFC)的应用程序和 .NET 应用程序做了同样的事情,但不幸的是我自己从未在 PowerBuilder 中开发过应用程序,所以我现在通常在考虑两个问题:

  1. 是否有一些 API(最好是 Java 或 C/C++)可以让人们遍历 PowerBuilder 应用程序的可视对象树?我在 PowerBuilder Native Interface system 上阅读了一些内容,但似乎这意味着用 C/C++ 编写 PowerBuilder 扩展,然后可以从 PowerBuilder 脚本语言调用,对吧?

  2. 如果有一些可用的 API - 也许 PowerBuilder 应用程序甚至会公开某种支持 IPC 的 API,它可以让我检查 PowerBuilder 对象层次结构的状态,而无需处于 PowerBuilder 应用程序的进程中?也许有可用的自动化接口,或者基于 COM 的东西——或者其他东西?

现在,我的印象是可能需要在 PowerBuilder 应用程序的进程中注入一个 DLL,然后获得对正在运行的 PowerBuilder VM 的访问权限,以便我可以查询它以获取对象树。某种 IPC 机制将让我将这些信息传输到 PowerBuilder 应用程序的进程之外。

有没有人有这方面的经验,或者可以阐明是否有人已经尝试过这样做?

最好的祝福,

  • 弗里里希
4

2 回答 2

6

首先,简单的答案:我认为你想要做的事情已经完成了,有点。Enable 的 Rex做了我认为你所追求的,但 IIRC 与开发人员交谈,它取决于应用程序中内置的代码挂钩。

这导致我认为您无法完全从应用程序外部完成我认为您尝试做的事情的建议。您可以使用 WinAPI 获取窗口句柄并用它做一些基本的事情,但不是您想要的那么多。并通过 WinAPI 获取有关 DataWindows 的信息?忘了它。

相信我听说过像您所询问的那样的 API,但我从未听说过其他自动化测试软件工具制造商接触过它。如果这是真的(并且此信息的质量类似于“在走廊里听到”),我怀疑让此信息泄露可能存在一些应用程序安全问题。(我知道永远不想感染我的应用程序,或者四处寻找我的秘密。咧嘴笑

即使有挂钩到 PowerBuilder VM 内存空间,我也不知道能够在没有一些 PowerScript 框架挂钩的情况下获取内存中的对象列表(例如,在每个打开和构造函数上使用对象句柄填充列表)。获得窗口句柄后,您可以轻松地遍历其控件数组(及其子类控件数组)以获取窗口上的对象列表,但诸如 NVO 实例变量的句柄之类的东西会出现问题。

我很欣赏这个想法。我希望我有更好的消息(也许 Rex 可能会解决您的问题而不必自己动手)。现在我更加期待eran 会发布什么!咧嘴笑

祝你好运,

特里。

于 2009-06-18T19:48:57.830 回答
3

我刚刚创建了这样一个工具,但我作弊了一点。实际上我自己要在 PB 新闻组上问同样的问题。我的解决方案由两部分组成:

Spy-like tool - 一个类似于 Spy++ 的独立应用程序,即允许您将目标拖到控件上,使用 Windows API 函数(虽然是用 PB 编写的)。

目标应用程序的内部基础设施- 位于所有应用程序窗口的祖先。一旦给定了某个(windows)句柄,它就会通过 Control[] 数组并查找其句柄与给定句柄匹配的控件。如有必要,它还会递归到诸如选项卡之类的控件容器中。

当用户选择一个控件时,spy 工具首先使用 Windows API 查找它的包含窗口。找到后,该工具会向该窗口发送一条自定义消息,然后由应用程序的基础架构处理。然后该控件位于 PB 应用程序中,其详细信息最终被发送回间谍工具,该工具将其呈现给用户。

我怀疑基础设施部分可以用一些外部东西代替,因为我已经看到似乎能够做到这一点的工具(Visual Expert,QTP)。但是,我没有时间进一步研究,而且这个解决方案相对容易开发。

我不得不说,你的问题来得正是时候。请参阅我最近提出的这个问题。如果您对我创建的工具感兴趣,请给我留言。

于 2009-06-18T10:27:45.970 回答