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

前端之家收集整理的这篇文章主要介绍了将UIAutomation提供程序添加到Delphi控件(特别是网格)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的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自动功能所需的一切.

原文链接:https://www.f2er.com/delphi/101799.html

猜你在找的Delphi相关文章