轻松访问辅助技术注册

本文介绍如何使用“轻松访问中心”注册辅助功能应用程序。 它还介绍了如何定制辅助功能应用程序,使其适用于安全桌面。

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

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

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

使用轻松访问中心注册

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

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

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

默认值为 0,指示 AT 需要旧版自动启动行为。 这会导致 AT 的“登录后启动”设置签入现成体验(OOBE)和控制面板(请参阅 控制面板 -> 易访问 -> 轻松访问中心 -> 更改登录设置),并在 UAC 和锁屏后自动启动 AT。

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

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

地方化

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

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

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

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

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

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

下面是一个示例:

@%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”、“magnifierpane”或“讲述人”。

  • 指定应用程序不应在安全桌面上运行,任何备用应用程序都不应运行。 对于此选项,请将 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”。 键的值是一个 DWORD 设置为启动时0x0003,或在应用程序退出时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