如何获取给定HWND句柄的PowerBuilder图形对象?

4
在我的(PowerBuilder)应用程序中,我想能够确定与给定窗口句柄相对应的graphicobject对象。
简单地遍历Control[]数组并比较每个子控件的Handle()函数返回的值是行不通的,因为我的应用程序中并非所有对象都是主窗口的子对象(考虑登录对话框)。
任何PowerScript或C/C++解决方案都可以接受。
也许有一些窗口消息可以发送到窗口句柄,这些消息只能被PowerBuilder窗口理解,这样它们就会响应其内部对象名称或类似内容?
1个回答

1

你是想从句柄中确定对象,还是只是想识别一个对象,例如知道需要修改的代码在哪里?我制作了一个工具来实现后者,但它使用的是对象聚焦而不是窗口句柄。


(添加于2010年6月21日)对于不是主窗口的子窗口,您可以使用 isValid() 显式地检查每个窗口类名。然后对于每个有效的窗口,通过查找句柄来深入挖掘。只要一次只打开一个窗口类的实例,这应该可以工作。如果您打开多个实例,则需要向这些窗口的 open 添加注册机制,以便应用程序有一种访问它们的方式。


不幸的是,对我来说前者是正确的。我需要获取与给定窗口句柄相对应的PowerBuilder应用程序的图形对象(如果有)。 - Frerich Raabe
1
你是否从祖先类继承了所有的窗口? - Hugh Brackett
@Hugh:不,我不是;我确实考虑过那种替代方案(然后在“打开”事件处理程序中维护HWND->graphicobject映射),但不幸的是,在我的情况下我不能使用它。 - Frerich Raabe
这个功能在正常使用中是否需要,还是只是用于测试?此外,对于Terry建议的映射,有什么限制吗?维护映射是否成问题,或者需要修改所有窗口是否不可接受? - Hugh Brackett
抱歉没能早些回复。我在正常使用中不需要这个功能,我想用它进行GUI测试。我们使用的工具允许编写一个小插件通过特定于工具包的API查询附加信息来展示给定HWND的额外功能(即属性或函数)。在我的情况下,我正在使用PBNI实现这样的插件 - 我已经解决了大部分问题,但是我缺少一种好的方法来识别给定HWND句柄的PowerBuilder控件。 - Frerich Raabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接