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

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

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
 

你可能感兴趣的:(自动化,windows,ui)