【问题标题】:Use UI Automation for old third party controls对旧的第三方控件使用 UI 自动化
【发布时间】:2012-03-11 13:31:20
【问题描述】:

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    它是possible, but it's a lot of work,并不适用于所有情况。

    关键要求是目标控件:

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

    • 具有与来自另一个进程的该控件进行通信的明确定义的方式。使用某些 Windows 消息集的控件(如 Win32 通用控件)属于这一类,像 MS Internet Explorer 控件这样的控件也属于这一类,它公开了一个扩展界面 (IHTMLDocument)。

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

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

    【讨论】:

    • 感谢您的良好回复。它帮助我把事情做好。据我所知,要走的路是消息传递或编组。我会在这里发布解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 2010-12-23
    • 2021-02-07
    • 2022-08-15
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多