Windows 笔状态

本主题讨论 Windows 10 及更高版本操作系统中 Windows 笔设备的笔状态。

主要状态

了解笔可能所处的各种物理位置或方向、与这些位置相关的场景以及应如何报告从位置到位置的转换,这些方面很重要。

超出范围

这是 Windows 笔最简单的场景,当用户将笔放在数字化仪的检测范围之外时会出现这种场景。

diagram showing a windows pen device that is out of range of the digitizer surface

在这种状态下(如上图所示),不会向操作系统发送任何输入报告。

在范围内

这是 Windows 笔的常见场景,当用户将笔握在数字化仪的检测范围内时会出现这种场景。

diagram showing a windows pen device that is in range of the digitizer surface

在这种状态下(如上图所示),输入报告将持续传递到操作系统,其中包含笔的位置和范围内开关 SET。 操作系统和应用程序可以显示光标或其他反馈以响应笔在范围内的动作。

有接触

这是 Windows 笔最常见的场景,当用户将笔按在屏幕表面时会发生这种场景。

diagram showing a windows pen device that is in contact with the digitizer surface

在这种状态下(如上图所示),输入报告将持续传递到操作系统,其中包含笔的位置、范围内开关 SET、笔尖开关 SET 以及对应的笔尖压力。 操作系统和应用程序可以着墨,或响应笔与屏幕表面的接触执行其他动作。

超出范围(意图擦除)

在这种 Windows 笔场景中,用户可以通过以下任一方式来激活擦除功能:将笔反转,或在笔超出数字化仪的检测范围时按下(并按住)擦除按钮。 笔的擦除能力也称为擦除提供。

diagram showing a windows pen device that is inverted and out of range of the digitizer surface. the inverted pen indicates an intent to erase.

在这种状态下(如上图所示),不会向操作系统发送任何输入报告。

超出范围(意图擦除)

这是 Windows 笔的常见场景,当用户将笔握在数字化仪的检测范围内并激活擦除功能时(通过反转笔或按下(并按住)擦除按钮),便会发生这种场景。

diagram showing a windows pen device that is inverted and within the detection range of the digitizer surface. the inverted pen indicates an intent to erase.

在这种状态下(如上图所示),输入报告将持续传递到操作系统,其中包含笔的位置、范围内开关 SET 和反转开关 SET。 操作系统和应用程序可以显示光标或其他反馈,以响应有擦除意图的笔是在检测范围内。

擦除

这是 Windows 笔的常见场景,当用户在激活了擦除功能(通过反转笔或按下(并按住)擦除按钮)的情况下用笔按压屏幕表面时,便会发生这种场景。

diagram showing a windows pen device that is inverted and touching the digitizer surface.

在这种状态下(如上图所示),输入报告将持续传递到操作系统,其中包含笔的位置、范围内开关 SET 和橡皮擦开关 SET。 对于使用尾端擦除实现方式的笔,反转开关在此状态下也应该为 SET。 操作系统和应用程序可以擦除墨水或执行与擦除相关的其他操作。

Windows 笔状态转换

下图显示了 Windows 笔的一组有效转换(与橡皮擦实现无关)。 考虑到数字化仪不会在此状态下向操作系统发送报告,为超出范围定义了单个状态(无论是否激活了擦除功能)。

diagram showing the set of valid transitions for a windows pen, irrespective of eraser implementation.

非擦除转换

如果在笔进入数字化仪的检测范围时没有激活擦除功能(无论是否使用橡皮擦),那么发生的笔状态转换将在图表中显示为从“笔超出范围”开始的弧线到“笔在范围内”。如果笔继续朝向屏幕表面进行接触,而擦除功能仍未激活,则该图显示笔状态转换为从“笔在范围内”到“笔已接触”。

当笔从屏幕表面抬起并在数字化仪的检测范围内时,显示此状态转换的弧线从“笔已接触”变为“笔在范围内”。作为此转换的一部分,应将单个输入报告传送到操作系统,同时清除笔尖开关,并包含笔与屏幕接触的最后位置。 随着笔继续抬高超出数字化仪的检测范围,则显示此状态转换的弧线从“笔在范围内”变为“笔超出范围”。作为此转换的一部分,应将单个最终输入报告传递给操作系统,同时清除所有开关,并包含笔在范围内的最后位置。

橡皮擦转换

如果在笔进入数字化仪的检测范围时激活了擦除功能(无论是否使用橡皮擦),则显示此状态转换的弧线将从“笔超出范围”变为“笔在范围内,意图擦除”。如果笔继续朝向屏幕表面并进行接触,擦除功能仍然激活,则显示此状态转换的弧线从“笔在范围内,意图擦除”变为“笔正在擦除”。

当笔从屏幕表面抬起并在数字化仪的检测范围内时,显示此状态转换的弧线从“笔正在擦除”变为“笔在范围内,意图擦除”。作为此转换的一部分,应将单个输入报告传送到操作系统,同时清除橡皮擦开关,并包含笔与屏幕接触的最后位置。 随着笔继续抬高超出数字化仪的检测范围,则显示此状态转换的弧线从“笔在范围内,意图擦除”变为“笔超出范围”。作为此转换的一部分,应将单个最终输入报告传递给操作系统,同时清除所有开关,并包含笔在范围内的最后位置。

橡皮擦按钮实现方式的特殊说明

与尾端擦除器实现不同,基于按钮的实现方式能够以物理方式允许用户激活/停用擦除功能,而无需笔过渡到“超出范围”状态。 但是,底层协议不支持这一点。

强烈建议当带有橡皮擦按钮的笔与屏幕接触时,无论按钮是按下还是松开,橡皮擦开关状态一直保持到笔抬起为止。 在“笔处于接触”状态期间意外按下橡皮擦按钮,以及在“笔正在擦除”状态期间意外松开橡皮擦按钮,这都是用户常见的情况,并且通过“笔超出范围”状态产生的转换会造成用户体验不愉快。

当笔在数字化仪的检测范围内,但没有与屏幕接触时,应该采用擦除功能的激活/停用。 但是,不支持“笔在范围内”和“笔在范围内并打算擦除”状态之间的直接转换,在这种情况下,笔状态必须始终通过“笔超出范围”进行转换。

例如,如果在笔在数字化仪的检测范围内但未与屏幕接触时按下擦除按钮,则应提供单个输入报告,其中所有开关均已清除,包含笔的最后位置范围,然后是连续报告,其中反转开关为 SET,范围内开关为 SET。

举个反例,如果在笔在数字化仪的检测范围内但未与屏幕接触时松开擦除按钮,则应提供单个输入报告,其中所有开关均已清除,包含笔的最后位置范围,反转开关为 SET。 随后应连续报告反转开关已清除且范围内开关已设置。

固件更新集合(可选)

集成的 Windows 笔设备可以使用 Windows 10 中的 HID 协议,为执行设备固件和供应商配置更新提供特定于供应商的顶级集合。

特定于供应商的固件更新集合可以提供用于将固件有效负载从主机传输到设备的输出报告。 这是非常有利的,因为它允许在不需要主机上的驱动程序的情况下执行固件更新。

HID I²C 描述符成员 wVersionID 在固件升级后必须递增。

集成的 Windows 笔设备应该能够从因断电(或某些其他错误)而失败的固件更新中恢复,方法是断开电源,然后重新通电。 强烈建议即使在固件更新失败后也可以使用基本功能。

防手掌误触

在 Windows 10 之前,当从笔设备接收到在范围内或与屏幕接触的输入时,操作系统将禁止所有触控输入(无论是在墨迹书写还是擦除模式下)。

在 Windows 10 版本 1607 中,死区面积更小,有助于同时进行笔和触控交互。 修改后的死区可捕获近 95% 的无意触控,同时仍提供出色的最终用户体验。

对于管用左手用户,死区范围为 100 - 270 度,径向跨度可达 12 厘米。

对于惯用右手用户,死区范围为 280 - 30 度,径向跨度可达 12 厘米。

diagram illustrating the palm rejection feature in windows 10 and later versions. touch contacts inside the dead zone are rejected while touch contacts outside the dead zone are processed normally.

操作系统接受来自笔尖左侧或右侧的触控交互,具体取决于用户的惯用手设置。 对于惯用右手用户,从笔尖左侧接受触控交互(如上图所示),惯用左手用户反之亦然。 默认情况下,笔是为惯用右手的用户配置的,但可以轻松更改,方法是打开“设置”,单击“设备”,然后打开“笔”对话窗口,如下所示。 但是,一些用户偏爱 Windows 8.1 中的防手掌误触行为。 为了支持这种偏好,Windows 10 还提供了一个设置:当笔进入范围时忽略所有触控输入。

image showing the pen settings dialog window, where you can select your handedness, for proper operation of the windows 10 palm rejection feature.

注意

尽管旧设备(特别是在提供笔输入时抑制触控输入的设备)也能 Windows 10 中运行,但这些设备将无法提供上述功能。 此外,这些设备未来也不会提供任何利用同时笔和触控报告的功能。

从 Windows 10 开始,可以使用以下注册表项在不支持同时进行笔和触控报告的系统上隐藏此设置。 将此注册表项设置为 0 将向用户显示设置,而将其设置为 1 则将隐藏。

注册表项 类型 单元
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Pen\HideSPTSettings DWORD 布尔值(1 或 0)

笔在范围内时的触控交互

如前所述,Windows 10 允许用户在笔在范围内时在支持同时触控/笔报告的硬件上执行触控交互。 但是一旦笔从范围内转变为与屏幕接触,所有触控交互都会被抑制。 这与以前版本的 Windows 中的行为相同。

墨迹书写表面的延迟缩放

Windows 10 中的内置防手掌误触功能效果最佳的情况是:手掌到达数字化仪表面之前检测到笔在数字化仪范围内。 但是,根据手掌碰触表面的速度,以及笔式数字化仪检测阈值的限制,系统可能会先检测到手掌,然后检测到笔。

在报告笔位置之前,将手掌作为多次触摸接触报告给操作系统的最具破坏性的结果之一是,墨迹表面可能会无意中改变缩放级别。 默认情况下,Windows 10 通过对着墨表面上的所有捏合/缩放交互应用 250 毫秒延迟来提供针对此行为的保护,以便为笔检测留出更多时间。 应该注意的是,这种延迟只会出现在带有集成笔的系统中。

OEM 可以通过 Windows 注册表配置此全局延迟值(默认值为 250 毫秒)。 对于检测阈值降低的笔式数字化仪,在检测到笔之前很有可能有手掌已经到达,建议增加延迟值(最大为 500 毫秒)。

对于具有改进的检测阈值和/或具有集成防手掌误触的触控解决方案的笔式数字化仪,建议减小此值(降至最低 0 毫秒)。

这是可用于设置捏合/缩放延迟值的注册表项。

注册表项 类型 单元
HKLM\SOFTWARE\Microsoft\Palm\DelayManipulationDuration DWORD 毫秒 (ms)

请注意,此注册表设置和相关的延迟缩放机制仅在具有集成笔式数字化仪的 Windows 10 系统上有效。