轻松访问辅助技术注册

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

轻松访问中心是 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。

[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”。 键的值是设置为启动时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>
   \
   \
   \
</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>
   \
   \
   \
</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>
   \
</HCIModel>
SimpleProfile REG_SZ 放大
StartExe REG_SZ c:\Program Files\Contoso\Bin\ContosoSR.exe
StartParams REG_SZ /m