“几分钟后把屏幕关掉”看起来像自动锁屏,实际上只完成了显示电源管理。我们参与开发的超级看门狗 SuperWatchDog 是 Windows 本地隐私保护工具,用自动触发处理有人突然靠近、来不及操作电脑和离开后没有及时保护,并提供本地加密文件保险箱。本文不从产品功能出发,而是先解决 Windows 自动锁屏为什么容易配置和判断错误。
一个超时值无法表达全部状态
显示器、系统电源和登录会话有不同的事件源与转换条件:
显示:亮屏 → 变暗 → 关闭
电源:运行 → 睡眠 → 休眠
会话:可交互 → 请求锁定 → 已锁定 → 已解锁
屏幕关闭后应用可能继续运行;会话锁定后设备也可以保持唤醒;睡眠则可能暂停后台任务。因此不能把三条状态线合并为 bool IsAway。
record RuntimeSnapshot(
DisplayState Display,
PowerState Power,
SessionState Session,
TimeSpan IdleTime);
bool NeedsAuthentication(RuntimeSnapshot x) =>
x.Session == SessionState.Locked;
若使用屏幕保护程序实现空闲锁定,需要配置等待时间和恢复时登录。组织管理设备还可能使用统一的不活动限制。页面值只是配置输入,最终应通过会话状态和恢复行为验证。
请求成功不等于结果完成
程序发起锁定时,还要处理异步边界:
void OnIdleDeadlineReached()
{
if (state.Session != SessionState.Interactive)
return;
state.Set(SessionState.LockRequested);
system.RequestLock();
}
void OnSessionLocked() => state.Set(SessionState.Locked);
只有收到真实锁定状态后才记录完成。显示关闭、窗口不可见或锁定请求返回,都不是等价证据。
一次可重复的验证
确认有效等待时间
↓
分别选择电池与交流电源
↓
停止输入并记录事件顺序
↓
显示关闭后唤醒
├─ 直接回到桌面 → 仅显示状态变化
└─ 要求身份验证 → 会话锁定成立
↓
核对组织策略是否覆盖本地设置
这比同时修改屏保、睡眠、显示器和注册表设置更容易定位问题。
从固定超时扩展到真实场景
空闲锁定适合“离开后忘记操作”,但固定超时无法同时覆盖阅读、演示、播放和突然有人靠近。额外触发应当作为候选输入,而不是篡改 Windows 状态含义。
超级看门狗允许用户预先选择锁屏、窗口处理和本地加密文件保险箱保护,再选择快捷键、USB、蓝牙或可选离席信号。工程上仍需逐项记录动作结果,并为可能影响未保存工作的操作保留确认与恢复路径。
自动锁屏的验收标准最终只有一个:恢复交互时,系统是否要求重新验证用户身份。