【问题标题】:Spy++ for PowerBuilder applications用于 PowerBuilder 应用程序的 Spy++
【发布时间】:2010-11-03 22:27:21
【问题描述】:

我正在尝试编写一个工具来检查基于 PowerBuilder 的应用程序的状态。我在想的是像 Spy++(或者,更好的是,存在于 .NET 应用程序中的“Snoop”)之类的东西,它可以让我检查一些基于 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 的接口 - 或者别的什么?

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

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

最好的问候,

  • 弗里希

【问题讨论】:

    标签: introspection powerbuilder code-injection spy++


    【解决方案1】:

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

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

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

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

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

    我不得不说,你的问题来得正是时候。见this recent question of mine。如果您对我创建的工具感兴趣,请给我留言。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      祝你好运,

      特里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多