将UI自动化用于旧的第三方控件

时间:2012-02-21 08:14:14

标签: c# winapi activex ui-automation gui-testing

为不支持UI自动化的第三方控件创建UI自动化提供程序是否有开箱即用的方法?

我的问题:我尝试使用VsFlexGrid ActiveX控件自动化vb6应用程序,但无法访问其属性和方法。

谢谢

1 个答案:

答案 0 :(得分:3)

这是possible, but it's a lot of work,并不适合所有情况。

关键要求是目标控制:

  • 有一个自己的HWND,最好有一个众所周知且稳定的类名

  • 有一种明确定义的方式,可以从另一个进程与该控件进行通信。使用某些Windows消息集(例如Win32常用控件)的控件属于此类别,就像MS Internet Explorer控件这样的控件一样,它暴露了一个扩展的接口(IHTMLDocument)。

但是如果控件没有某种方式从外部访问其信息,那么UI自动化将无济于事:所有UIA在这里做的是允许您将适配器类插入其现有框架;但它并没有为您提供任何新的或额外的工具来处理基础信息。

旧的VB时代的ActiveX控件是一个挑战:如果您可以在窗体上获得一个控件,则可以使用各种COM接口导航到该窗体上的其他控件并访问其属性。但问题是你不能轻易地从另一个过程中做到这一点。这些ActiveX控件中很少有(如果有的话)支持任何类型的Windows消息,因为它们假设客户端代码将改为使用COM接口。