我正在尝试编写一个工具,使我可以检查基于PowerBuilder的应用程序的状态。我在想的是类似Spy++(或者甚至更好的“.Snoop”,因为它存在于.NET应用程序中)之类的东西,它使我可以检查一些基于PowerBuilder的GUI的对象树(以及对象的属性)。
我已经对普通的(基于MFC的)应用程序以及.NET应用程序进行了相同的操作,但是不幸的是,我自己从未在PowerBuilder中开发过一个应用程序,因此我现在通常在思考两个问题:
PowerBuilder应用程序的可视对象树?我在PowerBuilder native 接口(interface)系统上进行了一些阅读,但这似乎是要用C/C++编写PowerBuilder扩展,然后可以从PowerBuilder脚本语言中调用它,对吗?
现在,我的印象是可能需要将DLL注入(inject)PowerBuilder应用程序的进程中,然后获得对正在运行的PowerBuilder VM的访问权限,以便我可以在其中查询对象树。然后,某种IPC机制将允许我将这些信息从PowerBuilder应用程序的过程中传输出去。
是否有人对此有一些经验,或者可以阐明是否有人已经尝试过这样做?
此致,
最佳答案
首先,一个简单的答案:我认为您想要做的事情已经完成了。 Rex from Enable可以满足我的要求,但是IIRC与开发人员交谈时,它依赖于应用程序中内置的代码 Hook 。
这导致建议我认为您将无法完全从应用程序外部执行我认为您要执行的操作。您可以使用WinAPI抓取窗口句柄,并以此做一些基本的事情,但是不尽如人意。并获得有关带有WinAPI的DataWindows的信息?忘了它。
我相信我听说过您所要求的API,但是我从未听说过其他人会自动测试软件工具制造商来使用它。如果这是真的(并且此信息的质量沿“在走廊中听到”的思路),我怀疑释放此信息可能存在一些应用程序安全性问题。 (我知道您永远不会感染我的应用程序,也不会四处寻找我的 secret 。咧嘴笑)
即使钩住了PowerBuilder VM的内存空间,我仍然不知道没有一些PowerScript框架钩子(Hook)就能获取内存中的对象列表(例如,在每个open和具有对象句柄的构造函数上填充一个列表)。一旦获得了窗口句柄,就可以轻松地遍历其控制数组(及其子类控制数组)以获取窗口上的对象列表,但是诸如NVO实例变量的句柄之类的问题将是有问题的。
我很欣赏这个主意。我希望我有更好的消息(除了Rex可能会解决您的问题而不必自己做的麻烦)。现在,我更加期待eran会发布什么!咧嘴笑
祝你好运,
特里
关于introspection - 适用于PowerBuilder应用程序的Spy++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1011536/