活动的可访问兼容型应用给程序员带来使用软件的新工具

摘要Active Accessibility推出的目标是方便身患残疾的人士使用电脑——可 用于放大器、屏幕阅读器,以及触觉型鼠标。它还可用来开发驱动其它软件的应用程序,最 后,其模拟用户输入的能力尤其适合测试软件的开发。

本文从Active Accessibility 的 基本概念出发,带你领略一个测试应用程序软件的开发过程。你将会看到这个测试程序是如 何与常用的控件以及其它UI元素交互,并处理随后的WinEvents的。

Microsoft Active Accessibility是一种相对较新的技术(1.0版在1997年5月份推出),它通过提 供一种从任意UI元素提取信息的有效的方法,实现了对UI元素的程序式访问。有了这种功能 ,程序员就能获得有关UI元素的信息从而与之完成交互。例如,你可以从程序里按下一个按 钮,从一个列表中选择一项,或者拉下一个组合框。最初,这种技术是为了方便缺陷人群使 用软件(例如视力很差的人),而实际上它得到了更为广泛的应用,例如放大器,屏幕阅读 器,以及触觉型鼠标。

Active Accessibility可以运行于Windows98和 Windows2000。为了在Windows95(英文版)和windows NT4.0(Service Pack 6及其以上)下使用,你可以安装Active Accessibility RDK和SDK,它们可以从下面的 站点下载:http://msdn.microsoft.com/isapi/gomscom.asp?TARGET=/enable/msaa/.

有关Active Accessibility的其它信息,也可以在此站点找到。

Active Accessibility的实质使得它非常适用于设计驱动其它软件产品的程序。一类能够很好的利用 Active Accessibility的程序是测试程序。另一类可能是执行一系列用户定义的响应UI元素 状态确认的键盘和鼠标输入的程序——例如,一个使得Windows Media播 放器自动响应“Windows Media Player Error”消息,从而不间断的尝试连接到 一个繁忙的服务器的程序,这种自动响应包括关闭这个对话框,单击适当的菜单而继续中断 的连接过程。

有两种Active Accessibility有关的程序:兼容Active Accessibility 的程序,操纵它们的工具。本文研究后一类型:开发Active Accessibility工具去控制其它 软件产品。作为重点,我将集中讨论测试程序的开发。这些不仅是有用的,而且它们展示了 Active Accessibility的几乎所有特性。

Active Accessibility基础

Active Accessibility的主要思想是提供以编制程序方式访问UI元素以得到这些元素信息的功能。称 支持这种功能的UI元素是可访问的。在大多数情况下,这意味着一个UI元素支持Iaccessible 接口。你也可以说在Active Accessibility的世界里,一个可访问的UI元素可表示为 Iaccessible接口。

每当你需要有关一个元素的信息,在其上执行一个动作,或者使 用Active Accessibility做其它的什么,你只需要通过使用代表这个元素的Iaccessible接口 的一种方法或者属性来引用这个元素。后面,我将说明一个Iaccessible接口/子 ID对如何表 示一个UI元素。现在,我们暂时集中讨论Iaccessible接口。

有几种方法取得代表一 个可访问UI元素的Iaccessible接口的指针。最普通的方法是使用Active Accessibility提供 的一种函数,例如AccessibleObjectFromPoint, AccessibleObjectFromWindow等等,或者 使用Iaccessible支持的方法,例如get_accChild,get_accParent。这些功能和方法将在后 面详细描述。

Iaccessible接口支持允许你得到各UI元素信息的属性,而其中对于测 试软件最重要的属性是名字、角色和状态。它们大多数将通过例子加以描述。让我们来看一 下Windows NT 4.0 Windows Explorer Find:所有的文件对话框显示在图1中,包括一个标示 为“Look in:”的组合列表框,它的名字是Look in:,角色是combobox,状态是 可见。UI元素的状态反映了元素的当前状态。

Figure 1 The IAccessible Example

时间: 2024-12-31 13:56:19

活动的可访问兼容型应用给程序员带来使用软件的新工具的相关文章

《.NET程序员面试秘笈》----面试题4 举例说明属性、get和set访问器的使用

面试题4 举例说明属性.get和set访问器的使用 .NET程序员面试秘笈[考点]对属性(Property)的理解,C#中get和set访问器的编写方法,理解自动实现的属性. [出现频率] [解答] 本例通过属性操作类中声明的私有字段_username,请注意在Name属性的get和set访问器中的逻辑操作.本例还有一个自动实现的属性,可读取用户输入的数据.在ch01目录下新建一个程序文件,并命名为GetSet.cs,编写代码如程序1.5所示. 在命令行下编译GetSet.cs后,执行GetSe

手机浏览器和PCchrome浏览器背景图兼容型问题

问题描述 手机浏览器和PCchrome浏览器背景图兼容型问题 整体的结构如下图 如上css在chrome的手机模式中,显示正常. 但是在手机上显示 这个兼容性如何调整 解决方案 强制用chrome来启动网页: <meta http-equiv="X-UA-Compatible" content="chrome=1″/> 参考资料:http://blog.csdn.net/kongjiea/article/details/38922785

面向程序员的数据库访问性能优化法则

面向程序员的数据库访问性能优化法则     http://blog.csdn.net/yzsind/archive/2010/12/06/6059209.aspx

在Vista中使用兼容模式运行应用程序

不少朋友在升级到Windows Vista后,却因所使用的应用程序在Windows Vista中不能正常工作而不得不退回到Windows XP,浪费时间不说,也让自己只能望Windows Vista众多诱人的功能与特性而兴叹. 其实,如果您打算升级到Windows Vista的话,除了首先检查通过Windows Vista认证的软件列表,查看您所使用的应用程序是不是通过了微软的"Certified for Windows Vista"或"Works with Windows

使用Java开发兼容IPv6的网络应用程序

简介:根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽.因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6.对于 Java,从其 1.4 版开始对 IPv6 提供了较好的支持,对程序员基本屏蔽了 IPv4 和 IPv6 的差异,但其中仍有一些 IPv6 引起的变化需要我们小心处理.针对这一情况,本文介绍了如何运用现有的 Java 技术应对这些变化. IPv6 背景介绍 目前我们使用的是第二代互联网 IPv4 技术,它

java-请问如何用AsyncClient写一个能访问并登录网站的程序?

问题描述 请问如何用AsyncClient写一个能访问并登录网站的程序? 请问如何用AsyncClient写一个能访问并登录网站的程序?不是android-async-http AsyncHttpClient. 能够根据地址,还有用户名和密码就能登录网站.初学网络程序设计,所以希望代码简洁些.请大家帮帮忙,谢谢.

《程序员度量:改善软件团队的分析学》一连接活动与目标

连接活动与目标 程序员是软件开发团队中的球员,这个软件开发团队是某个商业活动或者组织的一部分.至少这个组织的一些目标同样也是这个软件开发团队的目标(因此,那些目标也同样是程序员的目标).最有意义和有用的度量允许将程序员和团队关联到组织目标上. 为了做到这一点,需要定义那些软件团队所共享的组织目标,并且这些目标可以精确地或近似地测量出.然后,需要确定程序员和团队的哪些技能是可以测量的,最终,必须建立一个模型或者度量将技能与目标关联在一起. 你可能说,运动团队有一个清晰的目标,那就是赢得比赛(并且最

精通型程序员的特点

你知道有能力胜任和精通之间的区别是什么吗? 这听起来像一个很难回答的问题,因为这两者似乎意味着同样的事情.但它们之间的微妙区别至关重要. 有能力胜任是指有足够的经验和知识来完成各项工作:精通涉及知道为什么你要用某种方式来做事情,以及如何融入到大局中.换句话说,精通型从业者总是有能力胜任,但反之可能不成立. <Dreyfus Model of Skill Acquisition>非常详细地涵盖了这个主题.虽然标题听起来有点学术化,但是论文非常平易近人. 我建议阅读原始资源材料以便于能更好地纵观从

java编写的学生管理系统,系统很小,但是访问数据库很慢,程序很卡,是什么原因啊

问题描述 java编写的学生管理系统,系统很小,但是访问数据库很慢,程序很卡,是什么原因啊 程序可以运行,就是总崩溃,还应很慢java编写的学生管理系统,系统很小,但是访问数据库很慢,程序很卡,是什么原因啊 解决方案 1.配置问题? 2.代码里面持有的数据库连接没有及时关闭? 3.代码其他逻辑问题.自己检查一下吧 解决方案二: 使用的什么数据库呢?如果是mysql,上万的数据就会慢,需要建立索引.程序本身卡的可能性不大 解决方案三: 调试一下是否有异常处理! 解决方案四: 楼主在每个你觉得消耗时