背景
在 Windows 系统中,使用快捷键 Win
+L
可以使得系统立即锁定。然而,Windows Hello 功能会在锁屏界面开启时立刻进行面部识别,这导致了一个奇葩的结果:我刚锁定的系统立刻又被解锁。
解决方案
Windows 官方
“你好,我们直接摆烂。” [1]
AutoHotKey
知乎 @QkNM
用户给出了一个解决方案 [2],我完善了里面提到的 AutoHotKey 脚本:
; 按下 Win+L,系统锁定屏幕后息屏
#L::
; 手动延迟,因为此电脑锁屏到自动唤起界面有延迟,要保证下一个命令在此之后执行,时长根据情况自行调整
sleep 100
; 息屏,调用系统 API SendMessage,发送 WM_SYSCOMMAND 消息,参数为 SC_MONITORPOWER
SendMessage 0x112, 0xF170, 2, , Program Manager
; 返回
return
如果希望使用其它快捷键实现,则要补充 DllCall("LockWorkStation")
实现锁定屏幕的功能,完整代码如下:
; 按下 ctrl+alt+L,系统锁定屏幕后息屏
^!L::
; 锁定屏幕(这行代码在这里没有必要,因为这是 Win+L 原有的功能,除非是设置别的 hotkeys)
DllCall("LockWorkStation")
; 手动延迟,因为此电脑锁屏到自动唤起界面有延迟,要保证下一个命令在此之后执行,时长根据情况自行调整
sleep 100
; 息屏,调用系统 API SendMessage,发送 WM_SYSCOMMAND 消息,参数为 SC_MONITORPOWER
SendMessage 0x112, 0xF170, 2, , Program Manager
; 返回
return
使用说明
本脚本在 AutoHotKey1.0 上运行良好,2.0也没关系,会自行检测并引导安装 1.0 版本。
把代码复制到 .txt
中改文件后缀为 .ahk
,并使用 AutoHotKey 安装路径中提供的 Ahk2Exe 转化为 .exe
后双击执行即可生效。想要实现开机自启动的话把 .exe
放在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
路径下即可 [3]。
关于 AutoHotKey 脚本的语法,可参考 [4]。
其它脚本
我还推荐实现 CapLock 键切换中英文(短按),将大小写调整为长按(与 Mac 类似),这有利于避免 Shift + ...
操作时的误触 [5]。
参考
[1] answers.microsoft.com/zh-hans/windows/forum/all/windows/46ae2d17-0241-488b-9bba-18de19d5239e
[2] zhuanlan.zhihu.com/p/515053223
[3] blog.csdn.net/qq_43555917/article/details/106523588
[4] zhuanlan.zhihu.com/p/59697660
[5] https://www.zhihu.com/question/54950297