我正在尝试编写一个工具,它允许我检查基于PowerBuilder的应用程序的状态。我想到的是一些类似于Spy++ (或者更好的是,.NET应用程序中存在的“Snoop”)的东西,它允许我检查一些基于PowerBuilder的GUI的对象树(和对象的属性)。
对于普通的(基于MFC的)应用程序和.NET应用程序,我已经做了同样的工作,但不幸的是,我自己从来没有开发过PowerBuilder应用程序,所以我通常在这里考虑两个问题:
现在,我的印象是,可能需要向PowerBuilder应用程序的进程中注入一个DLL,然后访问正在运行的PowerBuilder VM,以便我可以查询它以获得对象树。然后,某种IPC机制将允许我将这些信息从PowerBuilder应用程序的进程中传输出去。
是否有人有这方面的经验,或能说明是否有人已经尝试这样做?
诚挚的问候,
发布于 2009-06-18 19:48:57
首先,简单的答案是:我认为你想要做的事情已经完成了。Rex从启用做我想要做的事情,但是IIRC从与开发人员的谈话中,它依赖于应用程序中内置的代码钩子。
这导致了这样的建议:我不认为你将能够做我认为你试图从应用程序完全外部完成的事情。您可以使用WinAPI抓取窗口句柄,并使用它做一些基本的事情,但不要像您想要的那样多。通过WinAPI获取有关DataWindows的信息吗?休想。
我相信我听说过像你所问的那样的API,但我从未听说过任何其他的自动化测试软件工具制造商会得到它。如果这是真的(而且这些信息的质量类似于“在走廊里听到了”),我怀疑让这个消息泄露出去可能存在一些应用程序安全问题。(我知道你不想感染我的申请,也不想到处打听我的秘密。咧嘴笑)
即使使用钩子进入PowerBuilder VM内存空间,我也不知道在没有PowerScript框架钩子的情况下能够获得内存中的对象列表(例如,在每个打开的和构造函数上填充一个列表和对象句柄)。一旦有了窗口句柄,您就可以轻松地遍历它的控件数组(以及它的子类控件数组),以获得窗口上的对象列表,但是像NVO实例变量的句柄之类的东西会有问题。
我很欣赏这个主意。我希望我有更好的消息(除了雷克斯也许可以解决你的问题,而不用麻烦你自己去做)。现在我更期待埃伦能发布什么!笑一笑
祝好运,
特里。
发布于 2009-06-18 10:27:45
我刚刚发明了这样一个工具,但我作弊了一点。我自己也要在PB新闻组上问同样的问题。我的解决方案由两部分组成:
Spy类工具-类似于Spy++的独立应用程序,即允许您使用Windows函数将目标拖到控件上(尽管是用PB编写的)。
目标应用程序的内部基础结构-位于应用程序的所有窗口的祖先。一旦给定了某个(windows)句柄,它就会遍历Control[]数组,并查找其句柄与给定句柄匹配的控件。如果有必要,它也会递归到控件容器中,比如选项卡。
当用户选择控件时,间谍工具首先使用Windows查找其包含的窗口。找到后,该工具会向该窗口发送一条自定义消息,然后由应用程序的基础设施来处理。然后该控件位于PB应用程序中,其详细信息最终被发送回间谍工具,该工具将它们呈现给用户。
我怀疑基础设施部分可以被一些外部的东西所取代,因为我已经看到了一些似乎能够做到这一点的工具(Visual,QTP)。然而,我没有时间做进一步的研究,而且这个解决方案相对容易开发。
我得说,你的问题来得太突然了。见我最近的这个问题。如果您对我创建的工具感兴趣,请给我一个评论。
https://stackoverflow.com/questions/1011536
复制相似问题