为啥名字中要带调研呢, 因为自动解锁真的太难了啊, ( •̥́ ˍ •̀ू ), 要不是查了几天资料, 我真以为自己能写的出来.

这篇文章就分享一下我想的方案, 以及调研结果, 后人有兴趣做的话可以看看能不能避免这些坑. 我会按照自己的思路, 从简单到复杂, 把我能想到的方案写出来.

Win32API解锁

如果你想调用API锁屏, 那可真的太容易了:

1
2
import ctypes
ctypes.windll.user32.LockWorkStation()

LockWorkStation function官方文档: 想要解锁, 必须登录.

在锁屏界面下键盘输入密码

Windows阻止了在锁屏界面下的键盘模拟

我自己写程序也尝试了一下, 在锁屏界面下, 发送命令给电脑, 模拟输入是不可行的, 只有用户输入密码解锁之后才可用.

进一步思考, 驱动级别的键盘设备, 在Windows中模拟出一个键盘硬件设备. 找到了这里Windows-driver-samples/input/kbfiltr/,这是一个键盘过滤设备. 但我实验了几天之后也发现自己实在跑不起来这个驱动, 可行性还有待验证. 不过我不报什么期望.

动态锁有没有逆操作

动态锁自动锁定与自动解锁问题, 这是在官网中的一个问题, 动态锁可以自动锁定, 但不能解锁. 然后看到了这里:

具有 Windows Hello 配套 (IoT) 设备的 Windows 解锁

不过有个注意点: 注意Microsoft 将在2020的弃用中为 Windows Hello 配套设备框架 API。 本身这个功能需要报给微软专门设置,现在又弃用API了, 真是补的一手好刀.

使用手机的蓝牙功能模拟键盘

这个方案与在锁屏界面下输入密码是类似的, 因为我们平时用的蓝牙键盘在锁屏界面下也是可以用的, 如果我们能把手机模拟成蓝牙设备输入, 这样来键入密码或许可以达到效果.

我找到了这个BLE-HID-Peripheral-for-Android项目, 但是在自己的电脑上始终没能成功把手机作为输入设备.

另外一个类似这样的讨论, 怎样将Android设备作为HID设备, 可能要改固件, Android目前好像还没有这个功能, 希望能有, 这样可以用手机的蓝牙模拟更多的设备.

总结

借此机会也整理了一下自己前些天的思路, 要想自动解锁Windows真是一件麻烦的事情. 不过也有别的方案, 类似指纹识别, 越来越多的笔记本都有了指纹识别的功能, 它很炫酷, 也能实现功能. 当然自动解锁Windows这件事是业余调研, 欢迎各位讨论.

上诉讨论的可能可行的方案都需要深入到内核或是驱动层面来做, 的确有些困难了.