将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自动化功能所需的一切. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |