精确式触摸板优化(触摸板优化指南)
OEM 可以采用多种方法来调整其基于 Windows 的设备上的默认触摸板体验。 默认值可以满足大多数用户的需求,因此,请仅在默认值无法提供 OEM 所需的特定体验时才对其进行调整(此外,应始终设置 HorizontalOffset/SpaceBarOffset)。
注意
请注意,如果错误地修改注册表,可能会出现严重问题。 请确保认真遵循这些步骤。 为提供额外的保护,请在修改前备份注册表。 请参阅如何备份和还原 Windows 中的注册表。
下面所述的可优化注册表值位于触摸板设备的 HKR 硬件注册表项中:
HKEY_LOCAL_MACHINE (HKLM)
在版本 1903 之前的 Windows 10 版本中,仅支持全局位置。 默认全局位置为:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\PrecisionTouchPad
在 Windows 10 版本 1903 和更高版本中,首先会在 HKR 注册表项下检查本指南中所述的每个注册表值,然后在HKEY_LOCAL_MACHINE
注册表项下检查(如果未找到)。 这样就可以基于值使用 HKR 位置替代 HKLM 的默认值。
意外激活防护
AAP 是精确式触摸板的一项功能,可以在发生键盘事件后短时间抑制某些操作,例如鼠标移动和点击。 具体超时取决于操作类型和接收输入的触摸板所在的区域,以及“触摸板设置”中名为“触摸板灵敏度”的用户设置。 “较灵敏”表示在发生键盘事件后抑制输入所花费的时间较少。 “最大灵敏度”表示 AAP 超时为零且 AAP 不起作用。
可优化参数
Windows 在触摸板上定义了两类“屏蔽”区域,以帮助防止用户在正常使用期间将手搁在键盘或触摸板上时发生意外输入。 触摸板划分为三个区域:
- 高灵敏度区域:该区域的输入抑制程度最低
- 屏蔽区域:此区域的输入可能会抑制一段时间
- 超级屏蔽区域:几乎始终抑制源自此区域的某些类型的输入(例如点击)
即使显式指定屏蔽区域大小,我们也强烈建议通过 SpaceBarOffset
和 HorizontalOffset
提供物理触摸板定位信息。 只有这样,Windows 才能在键盘输入与指向之间切换时在一致且可预测的用户体验方面做出决策。 有关详细信息,请参阅 Windows 精确式触摸板设备集成指南。
屏蔽区域
如果找到了 CurtainLeft
、CurtainRight
和 CurtainTop
这三个值,则会使用这些值作为与相应边缘的距离来构造屏蔽区域。 如果未找到所有这三个值,则接下来将使用旧配置(请参阅下面的“旧屏蔽区域”),再接下来使用默认值。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
CurtainTop | DWORD | 千分之一厘米 | 0+ | 0 | Windows 10 版本 1903+ |
CurtainLeft | DWORD | 千分之一厘米 | 0+ | 0 | Windows 10 版本 1903+ |
CurtainRight | DWORD | 千分之一厘米 | 0+ | 0 | Windows 10 版本 1903+ |
CurtainBottom(可选) | DWORD | 千分之一厘米 | 0+ | 0 | Windows 10 版本 1903+ |
屏蔽区域(隐式)
用于配置屏蔽区域的传统算法根据触摸板事件的垂直位置更改屏蔽区域大小,在自定义方面不够灵活。 建议今后仅设置SpaceBarOffset
和HorizontalOffset
值,或者根据前文所述通过CurtainTop
等配置屏蔽区域。
高灵敏度区域即使在使用键盘期间或紧接在使用键盘之后也能保持较高的响应度。
中心线两侧区域的宽度(上图中的“区域宽度”)定义为:
SpacebarOffset + AAPNonCurtainBaseWidth
请注意,这意味着区域的总宽度是此值的两倍。 SpacebarOffset
已为区域考虑,因为靠近键盘会提高手掌误触的风险。
区域的高度是相对于空格键定义的,并延伸到触摸板的底部。 到区域顶部的距离定义为:
AAPNonCurtainTop - SpaceBarOffset
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
SpaceBarOffset | DWORD | 千分之一厘米 | 0+ | 1000 | Windows 8.1+ |
HorizontalOffset | DWORD | 千分之一厘米 | 任意 | 0 | Windows 8.1 - Windows 10 版本 1511 支持大于 0 的范围,Windows 10 版本 1511+ 支持任何范围 |
HorizontalOffsetIsNeg | DWORD | 千分之一厘米 | 0-1 | 0 | Windows 8.1+,在 Windows 10 版本 1511 中已弃用 |
AAPNonCurtainTop | DWORD | 千分之一厘米 | 0+ | 1500 | Windows 10 版本 1607+ |
AAPNonCurtainBaseWidth | DWORD | 千分之一厘米 | 0+ | 1500 | Windows 10 版本 1607+ |
超级屏蔽区域
受限灵敏度区域是触摸板上灵敏度最低的区域。 它设计为用户在有意使用触摸板期间手指不会挪开的区域。 请注意,在默认情况下这些区域很小,只会为很大的设备加宽。
顶部、左侧和右侧区域的大小单独定义为与相应边缘的距离。 它们使用下表中显示的注册表项。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
SuperCurtainTop | DWORD | 千分之一厘米 | 0+ | 100 | Windows 10 版本 1511+ |
SuperCurtainLeft | DWORD | 千分之一厘米 | 0+ | 100 | Windows 10 版本 1511+ |
SuperCurtainRight | DWORD | 千分之一厘米 | 0+ | 100 | Windows 10 版本 1511+ |
SuperCurtainBottom | DWORD | 千分之一厘米 | 0+ | 100 | Windows 10 版本 1903+ |
右键单击区域
可以使用以下注册表值配置右键单击区域。 高度由 RightClickZoneHeight
表示为从底部边缘测量的整个触摸板高度的百分比。 RightClickZoneWidth
也是宽度的百分比,从右手配置的右边缘测量;如果启用了交换鼠标按钮选项,则从左手配置的左边缘测量。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
RightClickZoneHeight | DWORD | 百分比 | 1-100 | 25 | Windows 10 版本 1507+ |
RightClickZoneWidth | DWORD | 百分比 | 1-100 | 50 | Windows 10 版本 1507+ |
抑制意外激活防护
设置以下注册表项相当于用户选择了“最灵敏”(这会禁用 AAP)。 设置此注册表项后,Windows“设置”中的“触摸板灵敏度”设置(如上所示)不起作用。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\AAPDisabled
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
AAPDisabled | DWORD | 不适用 | 0-1 | 0 | Windows 10 版本 1511+ |
将键盘鼠标集合检测为非鼠标事件
Windows 提供一个可用于排除特定设备的注册表设置。 可在以下位置找到此设置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\IgnoredExternalMice
构建此注册表项类似于强制启用旧式触摸板。 更多详细信息,请参阅旧式触摸板强制检测。
HKEY_CURRENT_USER (HKCU)
OEM 可以修改以下 HKCU 注册表值以更改用户的触摸板设置。 所有值都在注册表项HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad
下。 要更改新建用户配置文件时使用的默认值,应对位于%SystemDrive%\Users\Default\NTUSER.DAT
的注册表配置单元进行修改。
当鼠标连接时保持触摸板处于打开状态
此设置指定在存在外部鼠标时是否允许触摸板保持活动状态。 处于非活动状态时,会忽略触摸板生成的任何输入。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
LeaveOnWithMouse | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
光标速度
此设置指定触摸板生成的鼠标运动移动光标的速率。 有效值为 1-20(含)。 此设置的用户界面将范围限制为 2-20,步长为 2。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
CursorSpeed | DWORD | 不适用 | 1-20 | 10 | Windows 10 版本 1511+ |
单击敏感度
此设置指定触摸板的触觉单击检测的相对灵敏度(如果受支持)。 有效值为 0-100(含)。 此设置的用户界面将范围限制为 0-100,步长为 50。 这是“按钮按下阈值”功能报告的面向用户的设置。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
ClickForceSensitivity | DWORD | 百分比 | 0-100 | 50 | Windows 11 内部版本 26027+ |
“触摸板反馈”部分
Windows 提供修改触摸板设置触摸板反馈部分中设置的功能。
已启用反馈
此设置指定是否在支持触觉的触摸板上启用触觉反馈。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
FeedbackEnabled | DWORD | 不适用 | 0-1 | 1 | Windows 11 |
注意
为了确保出色的用户体验,默认情况下应启用触觉反馈。 因此,此值应保持设置为1
。
强度
此设置指定触摸板触觉反馈的相对强度(如果受支持)。 有效值为 0-100(含)。 此设置的用户界面将范围限制为 0-100,步长为 25。 这是“触觉强度”功能报告的面向用户的设置。
注意
为了确保出色的用户体验,默认情况下应启用触觉反馈。 因此,此值应设置为非零值。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
FeedbackIntensity | DWORD | 百分比 | 0-100 | 50 | Windows 11 |
“点击”部分
Windows 提供修改触摸板设置点击部分中设置的功能。
触摸板灵敏度
此设置指定触摸板的灵敏度级别。 触摸板越灵敏,键盘活动后鼠标输入生成的抑制就越少。 较低的值对应于较高的灵敏度(这意味着 0 表示最高灵敏度)。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
AAPThreshold | DWORD | 不适用 | 0-4 | 2 | Windows 10 版本 1511+ |
单指点击以单击
此设置指定是否启用单指点击。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
TapsEnabled | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
二指点击以右键单击
此设置指定是否启用二指点击。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
TwoFingerTapEnabled | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
点击两次并拖动以多选
此设置指定是否启用点击和拖动手势。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
TapAndDrag | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
按触摸板右下角以右键单击
此设置指定按右下角的触摸板是否会导致生成右键单击而不是左键单击。 如果用户已交换鼠标左右键(GetSystemMetrics(SM_SWAPBUTTON)
为 true),右键单击区域会水平镜像到触摸板的左下角。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
RightClickZoneEnabled | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
“滚动和缩放”部分
Windows 提供使用触摸板设置滚动和缩放部分修改设置的功能。
注意
目前无法修改触摸板的滚动或缩放速度。
用两根手指拖动即可滚动页面
此设置指定是否启用二指平移。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
PanEnabled | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
滚动方向
此设置指定内容通过二指平移滚动的方向是否反转。 在默认状态下,触摸板上的联系人向上运动会导致内容向下滚动,联系人向左运动会导致内容向右滚动。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
ScrollDirection | DWORD | 不适用 | 0-1 | 0 | Windows 10 版本 1511+ |
使用捏合手势进行缩放
此设置指定是否启用二指缩放。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
ZoomEnabled | DWORD | 不适用 | 0-1 | 1 | Windows 10 版本 1511+ |
无用户界面的设置
Windows 支持以下设置,但不向设置应用程序中的用户公开。
鼠标加速
此设置指定触摸板生成的鼠标运动是否遵循由SystemParametersInfo(SPI_GETMOUSE)
返回的用户鼠标加速设置。 如果为 0,鼠标运动将始终应用加速。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
HonorMouseAccelSetting | DWORD | 不适用 | 0-1 | 0 | Windows 10 版本 1511+ |
右键单击区域宽度
此设置指定触摸板的右键单击区域的相对宽度。 有效值为 0-100(含)。 如果不为零,它将替代设备的配置。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
RightClickZoneWidth | DWORD | 百分比 | 0-100 | 0 | Windows 11 内部版本 26027+ |
右键单击区域高度
此设置指定触摸板的右键单击区域的相对高度。 有效值为 0-100(含)。 如果不为零,它将替代设备的配置。
注册表值 | 类型 | 单元 | 范围 | 默认 | 适用于 |
---|---|---|---|---|---|
RightClickZoneHeight | DWORD | 百分比 | 0-100 | 0 | Windows 11 内部版本 26027+ |
动态查询和修改设置
从 Windows 11 内部版本 26027 开始,可以通过 SystemParametersInfo
API 动态查询和修改用户的触摸板设置。 例如:
// Get the user's touchpad settings.
TOUCHPAD_PARAMETERS params = {};
params.versionNumber = TOUCHPAD_PARAMETERS_LATEST_VERSION;
RETURN_IF_WIN32_BOOL_FALSE(
::SystemParametersInfo(SPI_GETTOUCHPADPARAMETERS, sizeof(params), ¶ms, 0 /*fWinIni*/));
// Override the touchpad's right-click zone to have a 50% width and 33% height.
// NOTE: changing user settings should only be performed in response to explicit user intent.
params.rightClickZoneWidth = 50;
params.rightClickZoneHeight = 33;
RETURN_IF_WIN32_BOOL_FALSE(
::SystemParametersInfo(SPI_SETTOUCHPADPARAMETERS, sizeof(params), ¶ms, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE));
与对 SystemParametersInfo
的任何调用一样,该进程必须在用户帐户下运行,以便正确查询或修改设置。