BlackLock 是一个常驻后台的小工具:按下全局快捷键(默认 Alt + L)后,用一块覆盖所有显示器的黑色窗口把桌面遮住。默认按回车(或再按一次快捷键)即可解锁;也可开启密码保护。它没有任何窗口和设置界面,全部行为通过一个带注释的配置文件调整。项目提供 x64 / x86 / ARM64 三种原生架构,编译产物是单个约 170 KB 的 exe,真正零运行时依赖(静态 CRT,干净系统免装 VC++ 运行库即可运行)。
适用场景:临时离开工位时快速遮屏防窥、午休黑屏而不让电脑睡眠、需要"锁屏但后台任务继续跑"的场合。
⚠️ BlackLock 是"防君子不防小人"的便捷临时遮挡锁,不是对抗专业攻击者的安全产品。详见 安全声明。
- 🖤 真黑屏锁定:覆盖全部显示器,隐藏鼠标指针,动鼠标 / 点击都不解锁
- ⌨️ 全局快捷键:默认
Alt + L,可在配置文件自定义(大小写不敏感) - 🔓 两种解锁模式:默认「简单锁屏」——按 回车 或 再次按快捷键 即可解锁;勾选「开启密码」后需输入密码解锁
- 🚫 锁定期间不睡眠:阻止显示器息屏与系统睡眠,后台任务照常运行
- ♻️ 配置热重载:改完配置保存即时生效(密码 / 快捷键 / 开机自启 / 是否需要密码),无需重启
- 🚀 开机自启:可在配置文件或托盘菜单开关
- 📌 系统托盘操作:左键双击立即锁定;右键菜单提供立即锁定 / 开机自启 / 开启密码 / 暂停 / 配置 / 退出
- 🧩 拦截切换热键:锁定期间吞掉
Win、Alt+Tab、Alt+F4、Ctrl+Esc等 - 🖥️ 多屏 & 高 DPI:正确覆盖整个虚拟桌面,分辨率变化 / 热插拔自动重铺
- 📂 长路径支持:配置文件访问支持
\\?\扩展路径,不依赖系统LongPathsEnabled策略 - 🧱 三架构原生支持:发布 x64 / x86 / ARM64 版本,Windows on ARM 无需 x64 模拟
- 🪶 轻量 & 零依赖:纯 C(C17)+ Win32,单文件 exe,静态 CRT,仅依赖 Windows 系统 DLL
- 从 GitHub Releases 下载适合设备架构的
BlackLock.exe,或按下文自行编译。 - 双击运行 —— 程序驻留系统托盘,无窗口弹出。
- 按
Alt + L—— 屏幕立即变黑。 - 解锁:默认无需密码,按 回车 或 再按一次
Alt + L即可解锁回到桌面。
想要密码保护?先在配置文件里把 password 设成你的密码(只能用英文字母和数字,区分大小写),再右键托盘勾选 「开启密码」;之后解锁就需要输入密码 + 回车。
密码为空或含中文/符号时,程序会拒绝开启密码保护并弹气泡提示——因为锁屏时那些字符根本输不进去,设了会导致永远解不开锁。
首次运行会自动生成配置文件(见下)。想开机自启,右键托盘勾选「开机自启」,或把配置里的 autostart 改成 true。
- exe 同目录
config.ini—— 便携优先,最高优先级 %APPDATA%\BlackLock\config.ini—— 回退
若两处都没有,程序会只在 %APPDATA%\BlackLock\ 自动生成默认配置(保持 exe 目录洁净)。想要便携使用,把 config.ini 放到 exe 旁边即可——它优先级最高。
| 段 | 键 | 默认 | 说明 |
|---|---|---|---|
[general] |
hotkey |
Alt+L |
触发锁定的全局快捷键 |
[general] |
autostart |
false |
是否开机自启(同步到注册表启动项) |
[security] |
require_password |
false |
是否需要密码解锁(对应托盘「开启密码」)。false 时回车/再按快捷键即解锁 |
[security] |
password |
(空) | 解锁密码(明文,仅 require_password = true 时生效)。只能用英文字母和数字,区分大小写 |
; 支持 ; 与 # 整行注释
[general]
; 修饰键可用 Alt / Ctrl / Shift / Win,用 + 连接,例如 Alt+L、Ctrl+Alt+L
hotkey = Alt+L
autostart = false
[security]
; false = 回车/再按快捷键即解锁;true = 需输入下面的 password
require_password = false
password =💡 热重载:修改并保存配置文件后立即生效,无需重启程序。托盘菜单"配置"会用系统默认程序打开当前正在生效的那个文件。
- 修饰键:
Alt/Ctrl/Shift/Win,用+连接。 - 主键:字母
A~Z、数字0~9、功能键F1~F24。 - 大小写不敏感:
alt+l、Alt+L、ALT+L等价。 - 修饰键需精确匹配:
Alt+L不等于Alt+Shift+L。
本项目仅使用 MSVC 编译(CMakeLists 内置守卫,非 MSVC 直接报错)。
依赖
- CMake ≥ 3.21
- Visual Studio 2022/2026 的 C++ 桌面开发工具集(含 MSVC 与 Windows SDK)
命令(已提供 CMakePresets.json)
cmake --preset msvc # 配置 (Visual Studio 生成器, x64)
cmake --build --preset msvc-minsize # 构建体积最小版产物输出到 dist\x64\BlackLock.exe,同时在同目录生成一份默认 config.ini。
其它架构:
# 32 位 x86
cmake --preset msvc-x86
cmake --build --preset msvc-x86-minsize
# Windows on ARM 原生 ARM64(需安装 VS ARM64 生成工具)
cmake --preset msvc-arm64
cmake --build --preset msvc-arm64-minsize三个架构分目录输出(
dist\x64\、dist\x86\与dist\arm64\),可同时保留、互不覆盖。
其它配置:cmake --build --preset msvc-release / msvc-debug。
使用其它 VS 版本时,改
CMakePresets.json里的generator(如Visual Studio 17 2022)即可。
真正零运行时依赖:CRT 静态链接(/MT),因此不需要安装 VC++ Redistributable,干净系统上双击即可运行。exe 只导入 6 个 Windows 系统 DLL:
| 库 | 用途 |
|---|---|
user32 |
窗口、消息、热键、键盘钩子、光标 |
gdi32 |
黑色画刷 |
bcrypt |
密码 SHA-256 |
shell32 |
托盘图标、命令行、打开配置 |
advapi32 |
注册表(开机自启) |
kernel32 |
文件、互斥、内存、电源状态 |
可自行验证:dumpbin /dependents dist\x64\BlackLock.exe,输出中不应出现 VCRUNTIME140.dll 或 api-ms-win-crt-*。
-
版本号在 CMakeLists.txt 的
project(... VERSION x.y.z)定义,会显示在托盘右键菜单顶部(可点击,打开 GitHub 发布页)与 exe 文件属性中。 -
自动发布:推送形如
v1.2.3的 Git 标签,GitHub Actions 会自动编译 x64 / x86 / ARM64 Release 版,并上传各架构的BlackLock.exe与 zip 到对应的 GitHub Release。发布版本号取自标签(-DBL_VERSION_OVERRIDE),无需改代码。git tag v1.2.3 git push origin v1.2.3 # 触发构建与发布 -
不含在线自动升级:BlackLock 仅通过 GitHub Release 手动下载更新。工具本身约 170 KB,重新下载成本极低。
Q:忘记密码 / 程序卡住怎么办?
A:按 Ctrl + Alt + Del(内核级安全序列,任何用户态程序都拦不住)→ 选「任务管理器」。检测到任务管理器出现在前台时,黑屏会主动让到它下方,你即可用鼠标右键 BlackLock → 结束任务解除锁定。(锁定期间键盘被接管,任务管理器里请用鼠标操作。)
Q:锁定期间电脑会睡眠吗? A:不会。锁定期间会阻止显示器息屏与系统睡眠;解锁后恢复默认电源策略。
Q:怎么临时关掉快捷键?
A:右键托盘图标 → 勾选"暂停",Alt+L 即不再触发;再点一次恢复。
Q:杀毒软件报警?
A:BlackLock 使用了低级键盘钩子(WH_KEYBOARD_LL)来收密码,部分杀软会对此关注。代码开源、无任何网络行为,可自行审阅或从源码编译。
本项目不做代码签名:Authenticode 证书需付费,而免费的自签名证书不被 SmartScreen 信任、起不到降低误报的作用。若安全软件拦截了键盘钩子,锁定会失败并弹气泡提示(不会出现"黑屏却解不开"的情况)。
Q:密码输错了有提示吗? A:有,会蜂鸣一声。不用弹窗/气泡是因为锁定时黑屏全屏置顶,气泡要么被盖住、要么破坏纯黑观感。
Q:怎么彻底卸载?
A:退出程序(托盘 → 退出),删除 BlackLock.exe;如启用过开机自启,删注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 下的 BlackLock 值;如有配置残留,删 %APPDATA%\BlackLock 目录。
程序是单进程双状态机:
- 空闲态:无可见窗口,仅托盘图标,用
RegisterHotKey监听全局快捷键。 - 锁定态:创建覆盖虚拟桌面的黑色置顶窗口,安装
WH_KEYBOARD_LL键盘钩子收集密码并吞掉所有按键,用SetThreadExecutionState阻止睡眠;密码经 SHA-256 比对,正确则退出锁定态。
BlackLock 定位为便捷的临时遮挡锁,请知悉其边界:
Ctrl + Alt + Del无法被拦截,能物理接触键盘者可借此结束进程解锁——这是有意保留的逃生口。- 密码以明文存储在配置文件中,能读到该文件的人即可看到密码。
- 不承诺对抗专业攻击、内核级绕过、物理攻击。
需要真正的安全锁定,请使用系统 Win + L / 账户密码 / BitLocker。
lock/
├─ CMakeLists.txt # CMake 工程 (仅 MSVC, 静态 CRT)
├─ CMakePresets.json # 构建预设 (x64 / x86 / ARM64)
├─ CHANGELOG.md # 更新日志
├─ cmake/ # 构建辅助脚本
├─ .github/workflows/ # CI (编译+测试+零依赖/架构校验) 与 Release (标签自动发版)
├─ docs/
│ └─ 软件开发设计文档.md # 完整设计文档 (SDD)
├─ tests/
│ └─ test_config.c # 配置与长路径单元测试 (ctest)
└─ src/ # 源码 (main / config / hotkey / lockwin / keyhook / autostart / tray / util)
├─ config.default.ini # 默认配置模板 (内嵌为资源 + 拷到 dist)
└─ app.rc / app.manifest / app.ico
运行测试:
ctest --test-dir build -C MinSizeRel --output-on-failure完整设计与实现细节见 docs/软件开发设计文档.md。
基于 MIT License 开源。