轻松访问辅助技术注册

本文介绍如何向轻松访问中心注册辅助功能应用程序。 此外,还介绍了如何定制辅助功能应用程序,使其与安全桌面很好地配合工作。

轻松访问中心是 Microsoft Windows 的控制面板应用程序,将辅助功能和易用性汇集在一起。 通过使用轻松访问中心,用户可以配置其计算机以满足其物理和认知需求。

轻松访问中心的一个功能是帮助用户启动辅助功能应用程序,包括讲述人、屏幕键盘和放大镜。 已注册的第三方应用程序也会显示在“轻松访问中心”中,可以直接从中心启动。

辅助功能应用程序需要与安全桌面顺利配合工作。 安全桌面是在计算机在登录时锁定 (或用户锁定桌面) 以及提示用户允许潜在不安全操作时显示的用户界面。 出于安全原因,Windows 对在安全桌面上运行的第三方软件设置限制。 如果希望辅助功能应用程序在安全桌面上运行,则需要将应用程序注册到轻松访问中心。

注册到轻松访问中心

辅助功能应用程序通过在安装应用程序时创建一个或多个注册表项,向轻松访问中心注册。 下表列出了注册表项中包含的信息。

名称 说明 必需/可选 语言
应用程序名称 应用程序的名称,位于资源文件中。 此注册表值包含指定格式的字符串。 如果应用程序以英语以外的语言本地化,则这可能是应用程序名称的本地化版本。 该名称显示在“轻松访问中心”中。
必需 翻译词汇
ATExe 应用程序可执行文件或映像的名称。 Windows 使用此值来确定辅助功能应用程序是否正在运行。
必需 未本地化
CopySettingsToLockedDesktop 一个 DWORD 值,该值指示是否将辅助功能应用程序的设置复制到锁定的桌面。
如果此值为 1,则应用程序可以将设置写入用户注册表中的某个位置,并且 Windows 会将设置复制到锁定桌面的用户注册表中的同一位置。 这使应用程序能够将其状态从“普通”桌面保存到锁定的桌面。
可选 未本地化
说明 资源文件中应用程序的简要说明。 此注册表值包含指定格式的字符串。 如果应用程序以英语以外的语言本地化,则这可能是说明的本地化版本。 此字符串的长度必须小于 512 个字符。
说明显示在“轻松访问中心”中,向用户提供有关辅助功能应用程序的其他信息。
此值还可用于通知用户应用程序未在安全桌面上使用。
必需 翻译词汇
配置文件 XML 的一个简短部分,用于指定应用程序提供的住宿。 它可确保应用程序显示在“轻松访问中心”的正确类别下。
必需 未本地化
PassiveAutoStartBehavior

一个 DWORD 值,该值指示是否启用旧版自动启动行为。

默认值为 0,表示 AT 需要旧的自动启动行为。 这会导致在“开箱即用体验”中签入 AT 的“登录后启动”设置, (OOBE) ,控制面板 (看到控制面板 -> 轻松访问 -> 轻松访问中心 -> 更改登录设置) ,并在 UAC 和锁屏界面后自动启动 AT。

值为 1 表示 AT 应使用新的自动启动行为,即 AT 的“登录后启动”设置未在“全新体验” (OOBE) 和控制面板中选中,并且仅当选中“登录后启动”设置时,AT 才自动启动一次每个用户会话 (登录) 。

可选 未本地化
SecureDesktopAccommodation 要在此应用程序的安全桌面上运行的备用辅助功能应用程序的名称。 备用应用程序可以是不同的应用程序、同一应用程序的不同版本、Windows 中包含的辅助功能应用程序之一;如果不想在安全桌面上运行任何辅助功能应用程序,则为“无”。
可选 未本地化
简单配置文件 一个值,该值描述如何以一两个单词对应用程序进行分类:例如,屏幕阅读器、放大镜或屏幕键盘。
必需 未本地化
StartExe 可执行文件的完整路径。 此值用于启动辅助功能应用程序。
必需 未本地化
StartParams 命令行参数。 这些值与 StartExe 一起使用以启动应用程序。
可选 未本地化
TerminateOnDesktopSwitch 一个 DWORD 值,该值指定辅助功能应用程序如何响应安全桌面的转换或从安全桌面转换。
如果此值不存在或为 1,则 Windows 在每次转换到安全桌面或从安全桌面转换时都会终止并重启应用程序。 此选项为默认行为。
如果此值为 0,则 Windows 不会终止桌面转换上的辅助功能应用程序。 应用程序继续在以前的桌面上运行,如果实例尚未在该桌面上运行,则 Windows 会在新桌面上启动一个新实例。
可选 未本地化

本地化

应用程序名称和说明的注册表值需要可本地化,以支持多语言用户界面 (MUI) 。

这些字符串采用以下格式,其中尖括号表示所需的元素,方括号表示可选元素。

@<ResDllPath\ResDLLFilename>,-<resID>[;<comment>]

<ResDllPath\ResDLLFilename> 是资源 DLL 的路径。 路径可以包含环境变量。

<resID> 是字符串的资源 ID。

[注释] 包含任何可选注释。

以下是示例:

@%SystemRoot%\system32\anyAT.dll,-5020

有关 MUI 的详细信息,请参阅 Windows MUI 知识中心

HCI 配置文件

人机交互 (HCI) 配置文件是一种根据用户需求确定提供哪些便利设施的方法。 辅助功能应用程序应注册有关应用程序帮助适应的残障类型的信息。

配置文件注册表值包含 XML,用于描述辅助功能应用程序针对的残障类型。 此 XML 具有以下格式:

<HCIModel>
<Accommodation type="disability"/>
</HCIModel>

“住宿类型”属性的有效值如下所示:

  • 轻度视力
  • 视力严重
  • 轻度认知
  • 严重认知
  • 轻度灵巧性
  • 严重灵巧
  • 轻度听力
  • 严重听力
  • 温和语音
  • 严重语音

注意

这些值区分大小写。

如果辅助功能应用程序支持多个便利,则配置文件注册表值应包括每个住宿的 “住宿类型 ”属性。

轻松访问注册表详细信息

若要注册辅助功能应用程序,需要在以下注册表位置为应用程序创建一个密钥,并使用名称/值对填充它。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\

使用以下格式命名应用程序的注册表项:

“CompanyName_ProductName_v#”

例如,“Contoso_Magnifier_v2.0”。

若要添加注册表值,安装程序必须以提升的权限运行。

安全桌面住宿

使用 SecureDesktopAccommodation 注册表项可以指定辅助功能应用程序如何响应安全桌面。 默认情况下,如果应用程序已在普通桌面上运行,或者已配置为在登录桌面上运行,则轻松访问中心会在安全桌面上启动应用程序。 通过使用 SecureDesktopAccommodation 密钥,可以:

  • 指定要在安全桌面上使用的应用程序的备用版本。 例如,可能有禁用不安全功能的备用版本,或者经过优化以使用更少的内存并加快启动速度。

    若要指定备用版本,请将 SecureDesktopAccommodation 密钥设置为备用版本的名称。 例如,如果在 Contoso_Screen Reader_v1.0 密钥处注册了应用程序,则可以在 Contoso_Screen ReaderSecure_v1.0 注册备用版本。 然后,将 Contoso_Screen Reader_v1.0 的 SecureDesktopAccommodation 密钥设置为“Contoso_Screen ReaderSecure_v1.0”。

  • 指定要在安全桌面上使用的 Microsoft 辅助功能应用程序来代替应用程序。 对于此选项,请将 SecureDesktopAccommodation 设置为特定 Microsoft 辅助功能应用程序的名称:“osk”、“放大镜”或“讲述人”。

  • 指定应用程序不应在安全桌面上运行,也不应有任何备用应用程序。 对于此选项,请将 SecureDesktopAccommodation 设置为“none” (建议) 或不存在的应用程序的名称。

如果辅助功能应用程序的 SecureDesktopAccommodation 注册表项指定要在安全桌面上运行的 Microsoft 辅助功能应用程序代替应用程序,则 Windows 在转换到安全桌面时会通知用户。 为了通知用户,Windows 会显示在应用程序的“说明”注册表项中指定的字符串。 例如,如果 ScreenReader 豪华版 1.0 应用程序在安全桌面上使用 Microsoft 讲述人,它将包含说明字符串,例如,“Microsoft 讲述人将用于锁定、登录和其他安全桌面,以取代 ScreenReader 豪华版 1.0”。

如果应用程序的 SecureDesktopAccommodation 密钥设置为“none”,请使用 说明 键告知用户,应用程序在安全桌面上不可用,并且不提供替代项。

Windows 在“轻松访问中心”的相关位置显示“说明”文本。

在安装和登录桌面上运行

如果将辅助功能应用程序的注册密钥名称追加到以下注册表位置的字符串中,Windows 将在安装应用程序后立即启动该应用程序。 此外,每当登录桌面处于活动状态时,Windows 将自动运行应用程序。

HKCU\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\Configuration

配置键是逗号分隔的字符串。 若要添加应用程序,请在 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\ 处追加一个与应用程序的注册表项相同的字符串。

在作业中运行

如果 TerminateOnDesktopSwitch 注册表项不存在或设置为非零,则 Windows 在作业上下文中运行应用程序,在每次桌面转换时终止并重启应用程序。 在作业中运行可确保只有应用程序的单个实例在特定时间运行,并使应用程序不必监视桌面状态。 在作业中运行的缺点包括:

  • 每次桌面转换时,应用程序都会产生启动成本。
  • 应用程序只能通过轻松访问中心启动。
  • 应用程序必须持续保存其设置,因为它随时可以通过桌面转换终止。

如果 TerminateOnDesktopSwitch 密钥存在并且设置为 0,则 Windows 不会在作业中运行辅助功能应用程序。 这中思路具有以下优势:

  • 与桌面转换无关的启动成本。
  • 应用程序可以在“轻松访问中心”外部启动。

不在作业中运行的缺点包括:

  • 由于应用程序不会在桌面转换时重启,因此它必须检测当前桌面何时处于非活动状态并做出适当的响应。 例如,应用程序必须放弃对硬件的控制,以便应用程序的安全桌面版本可以使用它,并且应用程序应进入睡眠模式以避免使用处理器资源。
  • 如果可以通过“开始”菜单、Windows 资源管理器或命令行启动应用程序,则需要通知“轻松访问中心”。 有关详细信息,请参阅 Windows 徽标键 + U
  • 由于应用程序的多个副本可以在不同的桌面上同时运行,因此必须将应用程序编写为支持多个正在运行的副本。

Windows 徽标键 + U

如果辅助功能应用程序配置为在作业中运行,则应用程序的启动代码应包括对 IsProcessInJob 函数的调用,以确定应用程序是否在作业中启动。 如果是,应用程序应启动“轻松访问中心”,然后退出。 以下示例演示如何调用 IsProcessInJob

BOOL fAlreadyInJob;
BOOL fSuccess = IsProcessInJob(GetCurrentProcess(), NULL, &fAlreadyInJob); 

如果辅助功能应用程序配置为在作业外部运行,它应通知轻松访问中心应用程序正在正常启动并继续。

无论如何配置应用程序,如果它提供从应用程序内部退出的方法(例如“关闭”按钮),则应用程序必须通知轻松访问中心它正在退出。

应用程序通过设置临时注册表项,然后将 Windows 徽标键 + U 键组合注入输入流来通知轻松访问中心。

应用程序应在以下位置创建临时密钥。

HKCU\Software\Microsoft\Windows NT\CurrentVersion\AccessibilityTemp

临时密钥应与已注册的应用程序名称同名,例如“Contoso_Screen Reader_v1.0”。 键的值是在启动时设置为0x0003的 DWORD ,或在应用程序退出时0x0002。

INPUT input[4] = {0};

input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VK_LWIN;
input[0].ki.dwFlags = 0;

input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0x55; // U key
input[1].ki.dwFlags = 0;

input[2].type = INPUT_KEYBOARD;
input[2].ki.wVk = 0x55; // U key
input[2].ki.dwFlags = KEYEVENTF_KEYUP;

input[3].type = INPUT_KEYBOARD;
input[3].ki.wVk = VK_LWIN;
input[3].ki.dwFlags = KEYEVENTF_KEYUP;

SendInput(ARRAYSIZE(input), input, sizeof(input[0]));

Windows 徽标键 + 调高音量

当用户通过按 Windows 徽标键 + 调高音量组合键启动辅助功能应用程序时, ((例如,在平板电脑设备上) ),轻松访问中心会将以下命令行参数传递给应用程序:

/hardwarebuttonlaunch

应用程序可以使用此参数来确定是正常启动还是相应地调整行为。

传输安全桌面设置

如果辅助功能应用程序支持安全桌面,则可以在应用程序转换到安全桌面时使用注册表复制设置。 复制设置有助于使用户更无缝地过渡到安全桌面。

若要复制设置,请将应用程序的 CopySettingsToLockedDesktop 注册表项设置为 1,并将设置存储在以下注册表位置。

HKCU\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\<AT Key Name>

轻松访问中心在应用程序运行时监视此注册表位置。 转换到安全桌面时,轻松访问中心会将设置复制到安全桌面 HKCU 配置单元中的同一位置。 然后,应用程序可以读取设置并恢复其状态。

辅助功能应用程序应定期或每当值更改时写入其设置。 应用程序退出时写入设置将不起作用。 如果应用程序在作业中运行,则会在退出代码有机会运行之前,在从安全桌面转换时终止该应用程序。 如果应用程序未在作业中运行,则应用程序不会在安全桌面的转换中终止。

注意

由于此处所述的注册表项是在用户模式下编写的,因此它们不安全。 如果辅助功能应用程序读取这些密钥的内容,则应仔细检查数据并谨慎使用。 具体而言,应用程序应对 DWORD 值执行边界检查,注意字符串长度,不应读取插件 DLL 名称,并且不应执行在字符串中找到的任何命令。

注册表示例

以下示例演示名为 Contoso ScreenReader 版本 2.0 的虚构产品的可能注册表值,其本地化名称存储为资源。

表中的值位于以下键下:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\Contoso_Screen Reader_v2.0

名称 类型 数据
ApplicationName REG_SZ @%SystemRoot%\system32\ContosoRes.dll,-5020
说明 REG_SZ @%SystemRoot%\system32\ContosoRes.dll,-5040
配置文件 REG_SZ
XML
<HCIModel>
   <Accommodation type="low vision">
   <Accommodation type="severe vision">
   <Accommodation type="mild cognitive">
</HCIModel>
SimpleProfile REG_SZ ScreenReader
StartExe REG_SZ C:\ContosoTools\Bin\ContosoSR.exe
StartParams REG_SZ
SecureDesktopAccommodation REG_SZ 讲述人

如果应用程序在单个可执行文件中同时提供屏幕阅读器和屏幕放大镜,则屏幕阅读器组件的值可能如下所示:

名称 类型 数据
ApplicationName REG_SZ @C:\Program Files\Contoso\Contosores.dll,-30
说明 REG_SZ @C:\Program Files\Contoso\Contosores.dll,-32
配置文件 REG_SZ
XML
<HCIModel>
   <Accommodation type="low vision">
   <Accommodation type="severe vision">
   <Accommodation type="mild cognitive">
</HCIModel>
SimpleProfile REG_SZ ScreenReader
StartExe REG_SZ C:\Program Files\Contoso\Bin\ContosoSR.exe
StartParams REG_SZ /r

放大镜组件的值将位于以下键中:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Contosoibility\ATs\Contoso_Magnifier_v2.0

名称 类型 数据
ApplicationName REG_SZ @c:\Program Files\Contoso\Contosores.dll,-31
说明 REG_SZ @c:\Program Files\Contoso\Contosores.dll,-42
配置文件 REG_SZ
XML
<HCIModel>
   <Accommodation type="mild vision">
</HCIModel>
SimpleProfile REG_SZ 放大
StartExe REG_SZ c:\Program Files\Contoso\Bin\ContosoSR.exe
StartParams REG_SZ /m