MS Active Accessibility接口技术编程尝试

Microsoft Active Accessibility 2.0 is a COM-based technology that improves the
way accessibility aids work with applications running on Microsoft Windows?. It
provides dynamic-link libraries that are incorporated into the operating system
as well as a COM interface and application programming elements that provide
reliable methods for exposing information about user interface elements.   

基础

Microsoft Active Accessibility 是一种相对较新的技术(1.0版在1997年5月份推出)。目的是方便身患残疾的人士使用电脑——可用于放大器、屏幕阅读器,以及触觉型鼠标。同样还可以用来开发驱动其它软件的应用程序,其模拟用户输入的能力尤其适合测试软件的开发。

Active Accessibility 的主要思想是提供一种以程序方式访问UI元素信息或操作这些UI元素的功能。支持这种功能的 UI(User Interface) 元素是可访问的。在大多数情况下,这意味着一个UI元素支持 IAccessible 接口。你也可以说在 Active Accessibility 的世界里,一个可访问的UI元素可表示为 IAccessible 接口。

每当你需要得到有关一个元素的信息,在其上执行一个动作,或者使用 Active Accessibility 做其它的什么,你通常需要通过使用代表这个元素的 IAccessible 接口的一种方法或者属性来引用这个元素。

Active Accessibility 原理

Active Accessibility? 的核心功能由 OLEACC.DLL 提供的。每次当你调用一个函数来返回一个 IAccessible 接口指针,其与一个UI元素相对应,OLEACC.DLL就检查此元素是否内在支持 IAccessible。内在的支持意思是该元素的 IAccessible 是用程序实现的。

当一个UI元素不能内在的支持 IAccessible 时,OLEACC.DLL 检查该元素的Windows 类名。如果该类是一个 USER 或者 COMCTL32 支持的类,OLEACC.DLL 就创建一个代理为 UI 元素实现 IAccessible 接口。大多数--但不是全部--COMCTL32 控件都具有被 OLEACC.DLL 支持的 IAccessible 接口。

内在支持 IAccessible 的 UI 元素的例子是定制控件,owner-drawn 和无窗口的控件。因为开发者创建的程序包含这些UI元素,同样就实现了这些元素的接口,他们有责任为这些方法和属性提供正确的支持。

如果你用标准控件,这也意味着你不必重写你的应用,这些应用自动与Active Accessibility兼容。

Active Accessibility 名字是基于 Win32 控件的名字给出的,角色基于控件的功能定义。

如何得到 IAccessible 接口指针

每当你需要有关一个元素的信息,在其上执行一个动作,或者使用 Active Accessibility 做其它的什么,你只需要通过使用代表这个元素的 IAccessible 接口的一种方法或者属性来引用这个元素。

有几种方法取得代表一个可访问 UI 元素的 IAccessible 接口的指针。最普通的方法是使用 Active Accessibility 提供的一种函数,例如 AccessibleObjectFromPoint,AccessibleObjectFromWindow 等等,或者使用 IAccessible 支持的方法,例如 get_accChild,get_accParent。

IAccessible 接口支持允许你得到各 UI 元素信息的属性,而其中对于例子程序最重要的属性是名字、角色和状态。

Active Accessibility SDK提供了一些方便的工具,其中的 Object Inspector 能显示光标指向的UI元素的属性。Object Inspector 显示了Active Accessibility 的世界如何因为具有支持一个选定窗口内的 IAccessible 接口的控制而变得通用了。除了搜索有关元素的信息和通过 IAccessible 接口控制元素以外,Active Accessibility? 还有两种对于例子程序非常有用的特性:监视UI元素发生的事件和模拟键盘、鼠标输入。由可访问的元素激发的事件称为 WinEvents,当可访问的元素创建或者名字、状态、位置或者键盘焦点发生变化时,就激发这些事件(事件机制类似于标准的 Windows 的 hook 机制。监视事件我们将在后面介绍。)。这些事件的清单见文件 WINABLE.H。每个事件的名字以 EVENT_OBJECT 或 EVENT_SYSTEM 开始。

好,我们言归正传,来介绍如何得到 IAccessible 接口指针。前面已经提到过 AccessibleObjectFromWindow 这个 Active Accessibility 提供的函数,从字面上大家可以看出是通过窗口来得到对应的 IAccessible 接口指针。

因为 IAccessible 接口的数量比窗口要多(因为大多数--但不是全部--COMCTL32 控件都有被 OLEACC.DLL 支持的 IAccessible 接口。),使用 Win32 函数来搜索一个窗口将会比使用 Active Accessibility 树搜索与该窗口相应的 IAccessible 接口要占用少得多的时间。这就意味着为了提高性能,你应该使用 FindWindow 和 EnumWindows 这样的 Win32 函数来找到与希望的UI元素最接近的窗口。当然,在权衡 Win32 函数和 Active Accessibility 函数时,上面的规则只是使用它们的一般标准而不能盲目的遵照执行,重要的是理解它们的本来意义。

下面结合代码介绍一下它的用法。

我们来得到下面运行窗口的 IAccessible 接口指针。

图一

时间: 2024-08-04 03:14:51

MS Active Accessibility接口技术编程尝试的相关文章

msaa- MS Active Accessibility 接口技术问题

问题描述 MS Active Accessibility 接口技术问题 #include #include #include #include "atlbase.h" #include #pragma comment(lib,"oleacc.lib") BOOL FindChild (IAccessible* paccParent, char* szName, char* szRole, char* szClass, IAccessible** paccChild,

msaa-Active Accessibility 接口技术 遍历元素,如何取得句柄

问题描述 Active Accessibility 接口技术 遍历元素,如何取得句柄 我现在已经能做到使用 Active Accessibility 接口技术 遍历元素出IE里面所有元素了,但是不知道如何取对应的句柄 这是我的部分代码 foreach (var childChild1 in clientChilren) { if (childChild1.GetType().ToString().IndexOf("Object") > -1) { IAccessible chil

Matlab与.NET基于类型安全的接口混合编程入门

原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标.  [原创分享]Matlab.NET混编调用Figure窗体 http://www.cnblogs.com/asxinyu/archive/2013/04/14/3020813.html   [原创]开源.NET下的XML数据库介绍及入门  http://www.cnblogs.com/asxinyu/archive/2013/03/25/2980086.

【原创】Matlab与.NET基于类型安全的接口混合编程入门

              本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html    Matlab和C#混合编程文章目录 :http://www.cnblogs.com/asxinyu/p/4329753.html 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标.  [原创分享]Matlab.NET混编调用Figure窗体 http://www.cnblogs.com/asxinyu/archive/2

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)  (1)框架搭建    (2):数据库访问层的设计Demo 前言:这篇博客在数据访问层的基础上面我们继续学习对这个Demo的开发,希望大家都好好理解一下这个Demo的架构,到最后我实现权限的时候我就简单的说一下搭建过程就OK了,因为这个Demo的思想就是按照权限的设计方式去设计的,下面我们开始介绍面向接口的编程思想,如果感觉好的话可以

【黑科技】新一代脑机接口技术基石:通过大脑扫描数据重建图像

近日,中国科学院自动化研究所的研究团队提出了一种令人既兴奋又恐慌的大脑黑科技:"读脑术".据 5月6号的MIT Technology Review 头条报道,读脑术算法可以通过大脑扫描数据重建图像,其评论道,"新提出的技术有效克服了这个领域的一系列难点,能够更加精确地读懂人类大脑信号,还原出人眼所看到的视觉场景.该技术不仅对计算神经科学意义重大,也是研发新一代脑-机接口技术的基石."   That's interesting work with significan

113_《DELPHI接口技术开发实例解析》

<DELPHI接口技术开发实例解析> Delphi 教程 系列书籍 (113) <DELPHI接口技术开发实例解析> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: 下载 作者: 张仿彦 出版社:机械工业出版社 ISBN:7111203216 上架时间:2006-12-28 出版日期:2007 年1月 开本:16开 版次:1-1 内容简介 本书包括食堂管理系统.程控电话计费系统.批发零售管理系统.vod点播系统.钢筋拉伸试验管理系统5个案例,这5个不同行业

php接口技术实例详解_php技巧

本文实例讲述了php接口技术.分享给大家供大家参考,具体如下: 1.接口是一种特殊的抽象类,为什么这么说呢?如果一个抽象类中所有的方法都是抽象方法,那么我们就换一种称呼,称为"接口". 2.另外接口中不能声明变量. 3.接口中所有的成员都是public权限的.所有的子类在实现时,也一定要使用public权限去实现. 4.声明一个类的时候,我们用关键字"class",而声明接口的时候,我们用关键字"interface". <?php //定义

【ARM】ARM接口技术

0开发工具的使用 1安装keil4 2运行MDK411EXE安装 3选择好要安装的目的位置 4安装完成并运行 5安装JLink驱动 6运行测试例程验证开发板是否OK 1自己做一个例子 1新建一个项目 2选择与开发板对应的CPU型号 3设置一个好的目标和组 4配置目标 5创建一个测试文件 51创建mainc文件 52建一个汇编文件 53建立一个ini文件 6设置参数 7上板子调试 2ARM接口原理 1查看原理图 2GPIO控制原理 21GPBCON 22GPBDAT 3程序怎么写 4练习自己实现b