加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

将UIAutomation提供程序添加到Delphi控件(特别是网格)

发布时间:2020-12-15 04:19:30 所属栏目:大数据 来源:网络整理
导读:我们的VCL Delphi应用程序有许多网格,我们需要通过UIAutomation开始与之交互.有许多问题,尤其是TStringGrid没有实现任何IUIAutomation模式(IGridProvider或ITableProvider,或者甚至是IValueProvider). 我试图找出我需要添加到TStringGrid以允许它实现提供程
我们的VCL Delphi应用程序有许多网格,我们需要通过UIAutomation开始与之交互.有许多问题,尤其是TStringGrid没有实现任何IUIAutomation模式(IGridProvider或ITableProvider,或者甚至是IValueProvider).

我试图找出我需要添加到TStringGrid以允许它实现提供程序(在.NET中的System.Windows.Automation.Provider命名空间中).

解决方法

虽然我无法提供实现TStringGrid所需的自动化功能所需的具体步骤,但我可以说,基于这些注释,您几乎拥有所需的一切.

你找到的文章describing the basic implementation of UI Automation support for Win32 Unmanaged code是一个很好的起点.

然后,通过UIAutomationCore.DLL中的IDL公开和未公开的内容的问题通过以下事实解决:所讨论的DLL本身旨在被非托管代码使用.它不包含托管代码本身.至少没有涉及非托管用例.

包含的内容是IDL描述的COM接口,但也包含DLL导出的一些函数.据我所知,IDL没有描述DLL的导出表.即使它能够这样做,在这个DLL的情况下它也不会(至少不是在所有情况下).

例如,您提到的UiaHostProviderFromHwnd()函数是一个简单的DLL导出.一些additional functions exported in this way are described in this MSDN blog post describing creating a .net interop interface for this library.在那篇文章中,它们被称为“平面API方法”.

使用PE Explorer我可以看到UIAutomationCore.dll库导出的81个这样的函数.

不幸的是,DLL导出表没有描述任何导出函数的参数或返回类型,只描述了名称.因此,除了类型库(从IDL生成)之外,您还需要找到并转换UIAutomationCore.h头文件以便与Delphi(即Pascal)一起使用.

然后,您应该拥有为所需的任何VCL控件实现UI自动化功能所需的一切.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读