读屏软件工作原理
【文 / 张赐荣】

Windows UIAutomation 是 Windows 操作系统中的软件自动化技术,能让开发人员通过编程方式访问和操作 Windows 系统中的用户界面元素。
UIAutomation 在 .NET Framework 类库中进行了良好的封装,提供了对 Windows UI 元素的自动访问和操作,包括窗口、控件、菜单、对话框等。.NET封装还提供了一些方便的功能,例如UI元素的缓存、自动化树的遍历、UI元素的焦点控制等。这些功能可以大大简化开发人员的工作,使得开发更加高效。
屏幕阅读器通过调用UIAutomation API获取屏幕上的窗口控件元素和信息。例如按钮、文本框、列表等,这些元素会被转换成可读的文本或语音输出,以便盲人或低视力用户能够获知屏幕上的内容,理解应用程序的功能和布局。
UIAutomation提供了一些API,便于屏幕阅读器控制应用程序的行为。例如,UIAutomation提供了Invoke()函数,允许屏幕阅读器激活特定的控件等。
另外,UIAutomation还提供了一些事件,类似于FocusChanged,SelectionChanged事件和ValueChanged事件,这些事件可以告诉屏幕阅读器用户当前选择的元素或元素的值已更改。
Windows UIAutomation等辅助功能API,对于屏幕阅读器来说是至关重要的,因为它提供了一个标准的interface来与应用程序进行交互,使得屏幕阅读器可以更好地读取和控制应用程序。

应用程序、辅助功能接口(UIA)和屏幕阅读器三者之间的关系:
1.应用程序是指在操作系统上运行的软件程序,如浏览器、文本编辑器、图像处理软件等等。应用程序通常有自己的用户界面,其中包含各种元素,如文本框、按钮、菜单等等。
2.UI Automation (UIA) 接口是一组用于自动化应用程序界面的API,通过UIA接口,客户端可以访问和操作应用程序界面的各种元素,如获取元素的属性和状态、执行元素的操作等等。UIA接口提供了一种标准的方式,使得客户端可以与各种类型的应用程序进行交互,包括桌面应用程序、Web应用程序和通用Windows应用程序等等。
3.读屏软件是一种辅助技术,用于帮助视觉障碍者访问计算机界面。读屏软件通过屏幕阅读器的方式,将计算机界面上的信息转化为语音或文字输出,以帮助用户获取信息和操作计算机。读屏软件通常使用UI Automation接口来访问和操作应用程序界面的各种元素,以便生成语音或文字输出,提高用户的使用体验。
应用程序、UI Automation (UIA) 接口和读屏软件是三个相互关联的概念。应用程序提供用户界面元素,UIA接口提供了一种标准的方式来自动化访问和操作这些元素,而读屏软件使用UIA接口来获取应用程序界面的信息和状态,以便为视觉障碍者提供辅助技术服务。

结合NVDA读屏软件,来大致讲一讲NVDA屏幕阅读器的工作原理——利用辅助功能API获得窗口信息的大致过程:
1.屏幕阅读器通过UIAutomation API向Windows操作系统注册自己,以便系统能够通知屏幕阅读器关于UI元素的事件行为和UI信息。
2.当用户打开应用程序时,UIAutomation会启动并开始检测应用程序中的UI元素,例如按钮、文本框、标签等。
获得了UIAutomation窗口元素,屏幕阅读器就能使用UIAutomation API遍历整个UI元素树,以找到所需的UI元素。UIAutomation API提供了许多方法,用于搜索和识别UI元素。
3.当操作者利用屏幕阅读器找到了所需的UI元素,可以使用UIAutomation API获取元素的属性、状态和其他信息。这些信息包括元素的名称、类型、位置、大小、可见性、焦点状态等等。客户端可以使用这些信息来理解应用程序的界面,并提供必要的反馈给用户。
4.除了获取信息外,屏幕阅读器还可以使用UIAutomation API执行用户的操作,例如点击按钮、输入文本、选择菜单等等。这些操作通过UIAutomation API发送到应用程序,从而实现自动化操作。
5.订阅事件,UIAutomation API还提供了事件机制,客户端可以通过订阅事件来获取应用程序界面的变化。例如,当用户单击一个按钮时,客户端可以收到UI元素状态改变的事件。这些事件可以让客户端及时更新应用程序的状态,并提供必要的反馈给用户。

对于一些不支持UIAutomation的控件,除了使用Windows UIAutomation(UIA)框架之外,屏幕阅读器还可以配合使用其他接口来访问应用程序中的UI元素。
下面列举一些常用的接口:
1.Microsoft Active Accessibility(MSAA):MSAA是一种在Windows上广泛使用的辅助技术,可以让屏幕阅读器和其他辅助技术访问应用程序的用户界面元素。与UIA不同的是,MSAA并不依赖于应用程序的实现,因此可以与老旧的应用程序和一些不支持UIA的应用程序一起使用。
2.IAccessible2:IAccessible2是一个由IBM、Mozilla和其他组织共同开发的辅助技术规范,旨在为屏幕阅读器和其他辅助技术提供更好的访问现代Web应用程序和其他支持高级用户界面元素的应用程序的方法。IAccessible2通常与UIA和MSAA一起使用。
3.Java Accessibility Bridge(JAB)是一种Java辅助技术,可以让屏幕阅读器和其他辅助技术访问Java应用程序中的用户界面元素。JAB为Java Swing和AWT组件提供了可访问性支持,包括文本框、按钮、复选框、列表、菜单等。
JAB为Java应用程序提供了一组API,可以用来查询和操作Java Swing和AWT组件。屏幕阅读器可以使用JAB API来获取组件的名称、状态、属性和事件,并将其转换为易于理解的语音或文本输出。
屏幕阅读器使用这些辅助功能API来获取窗口和应用程序界面元素的信息,然后将这些信息转换成音频或文本输出。它们通过与操作系统和应用程序进行交互来获取这些信息,并将其传递给用户。

参考资料:
1. 《UI Automation Overview - .NET Framework》https://learn.microsoft.com/en-us/dotnet/framework/ui-automation/
2. 《Microsoft Active Accessibility - Win32 apps》: https://learn.microsoft.com/en-us/windows/win32/winauto/microsoft-active-accessibility
3.《Java Access Bridge · Wikipedia》 https://en.wikipedia.org/wiki/Java_Access_Bridge
4. 《IAccessible2》: https://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/
5.《NVDA Screen Reader》:: https://www.nvaccess.org/
6.《Windows应用无障碍开发指南》: http://cdn1.ime.sogou.com/Windows%E5%BA%94%E7%94%A8%E6%97%A0%E9%9A%9C%E7%A2%8D%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%971.0.pdf

张赐荣 | 浅谈 UIAutomation 自动化技术在读屏软件中的应用相关推荐

  1. 计算机室在初中英语教学中的应用,浅谈现代教育技术在初中英语教学中的运用...

    科 教 创 新浅谈现代教育技术在初中英语教学中的运用 宁夏中卫市中宁县第四中学 段立勇 [摘 要]随着计算机与网络的普及.教育信息化的不断深化与发展,计算机与网络走进了普通中小学教室.走进了广大教师与 ...

  2. 张赐荣 | 工信部信息技术互联网内容无障碍可访问性技术要求与测试方法

    [整理人:张赐荣] <GB_T37668-2019_信息技术互联网内容无障碍可访问性技术要求与测试方法> 前言 本标准按照GB/T1.1-2009给出的规则起草. 请注意本文件的某些内容可 ...

  3. 计算机技术在油气储运工程的应用,浅谈自动化技术在油气储运工程中的应用

    张宏刚 刘占奎 刘栋 张鹏涛 李飞 [摘要]油气属于易燃.易爆类化学品,其在储存以及运输过程中的危险指数相对较高.因此,油气储运的安全性是整个油气生产过程中备受关注的重要问题.油气储运的作业强度非常大 ...

  4. 浅谈区块链技术应用场景

    浅谈区块链技术应用场景 摘要 一,区块链技术简介 二,区块链技术基础 1. 点对点之间传输信息的网络 2. 非对称加密技术 3. 共识机制 三,基于软件层面区块链技术应用场景 应用层 区块链技术与身份 ...

  5. 上海国际快递物流展浅谈快递自动化分拣设备市场“起风了”!

    上海国际快递物流展浅谈快递自动化分拣设备市场"起风了"! " 自动化分拣设备市场"起风了"." "未来5年,要深入挖掘'快递经济' ...

  6. 张赐荣:计算机网络快速入门教程

    计算机网络协议快速入门 [编辑 / 张赐荣] 我们每天都使用互联网.你有没有想过,它是如何工作的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了, ...

  7. 张赐荣 | 安装版软件和绿色版软件究竟有什么区别?

    安装版软件和绿色版软件究竟有什么区别? [作者:张赐荣] 众所周知,大部分软件都需要先安装才能使用,例如 QQ.360.迅雷等,要先从网上下载一个安装包,然后安装到电脑的 C 盘或者 D 盘等.大部分 ...

  8. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  9. 浅谈第四层交换机技术及应用

    原文地址:浅谈第四层交换机技术及应用 作者:ylky_2000 一. 什么是第四层交换机 要想认识第四层交换机,先得对传统的第二层交换机和现在广泛应用的第三层交换机的基本工作原理和性能,有一些简单了解 ...

最新文章

  1. MySQL:表的操作 知识点难点总结:表完整性约束及其他常用知识点二次总结
  2. Centos 卸载mysql
  3. 记录一下Junit测试MongoDB,获取MongoTemplate
  4. uni-app + vue-cli3 安装axios、vant等依赖 - 操作篇
  5. JavaScript编程艺术-第7章代码汇总(2)
  6. Java抓取淘宝/天猫商品详情 1
  7. mysql数据库编程第六章试题_2016计算机二级MySQL数据库试题及答案
  8. vue使用a标签下载文件
  9. 线下实体零售门店如何做好会员运营管理系统?
  10. 感冒会引发腺样体肥大吗?
  11. 远程windows蓝屏解决办法
  12. Linux文本比较指令(diff,cmp)详解
  13. 教师人生格言积极向上的句子
  14. 2017-2020(4周年)读书年度总结及书单
  15. Elasticsearch之 cerebro 安装配置详细使用
  16. python手机编程软件-手机上Python编程的软件分享
  17. Android build.prop参数详解
  18. oracle wallet java_oracle wallet实践及常用维护操作
  19. esc键退出全屏 vue_解决了VUE在浏览器全屏下监听不到Esc键盘事件
  20. 地球物理勘探技术类毕业论文文献有哪些?

热门文章

  1. 基于stm32f4的按键检测
  2. 【Matlab】MATLAB矩阵处理
  3. 目标定位算法(二)之基于测距的定位算法
  4. 数据结构-栈基本功能的实现
  5. Java之国际化操作
  6. Error unpacking rpm package initscripts解决方案
  7. 对称加密 非对称加密
  8. Linux双硬盘引导,Linux系统下双硬盘多系统引导深入探究
  9. android h5游戏图片不缓存,H5小游戏资源缓存方法与流程
  10. jarvis oj Web By Assassin