Skip to content

Repository files navigation

BlackLock

无界面、极简、单文件的 Windows 黑屏锁屏工具

一键真黑屏锁住屏幕(而非息屏),回车或密码解锁;锁定期间不睡眠、动鼠标不解锁。

platform language size deps downloads license


简介

BlackLock 是一个常驻后台的小工具:按下全局快捷键(默认 Alt + L)后,用一块覆盖所有显示器的黑色窗口把桌面遮住。默认按回车(或再按一次快捷键)即可解锁;也可开启密码保护。它没有任何窗口和设置界面,全部行为通过一个带注释的配置文件调整。项目提供 x64 / x86 / ARM64 三种原生架构,编译产物是单个约 170 KB 的 exe,真正零运行时依赖(静态 CRT,干净系统免装 VC++ 运行库即可运行)。

适用场景:临时离开工位时快速遮屏防窥、午休黑屏而不让电脑睡眠、需要"锁屏但后台任务继续跑"的场合。

⚠️ BlackLock 是"防君子不防小人"的便捷临时遮挡锁,不是对抗专业攻击者的安全产品。详见 安全声明

功能特性

  • 🖤 真黑屏锁定:覆盖全部显示器,隐藏鼠标指针,动鼠标 / 点击都不解锁
  • ⌨️ 全局快捷键:默认 Alt + L,可在配置文件自定义(大小写不敏感)
  • 🔓 两种解锁模式:默认「简单锁屏」——按 回车再次按快捷键 即可解锁;勾选「开启密码」后需输入密码解锁
  • 🚫 锁定期间不睡眠:阻止显示器息屏与系统睡眠,后台任务照常运行
  • ♻️ 配置热重载:改完配置保存即时生效(密码 / 快捷键 / 开机自启 / 是否需要密码),无需重启
  • 🚀 开机自启:可在配置文件或托盘菜单开关
  • 📌 系统托盘操作:左键双击立即锁定;右键菜单提供立即锁定 / 开机自启 / 开启密码 / 暂停 / 配置 / 退出
  • 🧩 拦截切换热键:锁定期间吞掉 WinAlt+TabAlt+F4Ctrl+Esc
  • 🖥️ 多屏 & 高 DPI:正确覆盖整个虚拟桌面,分辨率变化 / 热插拔自动重铺
  • 📂 长路径支持:配置文件访问支持 \\?\ 扩展路径,不依赖系统 LongPathsEnabled 策略
  • 🧱 三架构原生支持:发布 x64 / x86 / ARM64 版本,Windows on ARM 无需 x64 模拟
  • 🪶 轻量 & 零依赖:纯 C(C17)+ Win32,单文件 exe,静态 CRT,仅依赖 Windows 系统 DLL

快速开始

  1. GitHub Releases 下载适合设备架构的 BlackLock.exe,或按下文自行编译。
  2. 双击运行 —— 程序驻留系统托盘,无窗口弹出。
  3. Alt + L —— 屏幕立即变黑。
  4. 解锁:默认无需密码,按 回车再按一次 Alt + L 即可解锁回到桌面。

想要密码保护?先在配置文件里把 password 设成你的密码(只能用英文字母和数字,区分大小写),再右键托盘勾选 「开启密码」;之后解锁就需要输入密码 + 回车。

密码为空或含中文/符号时,程序会拒绝开启密码保护并弹气泡提示——因为锁屏时那些字符根本输不进去,设了会导致永远解不开锁。

首次运行会自动生成配置文件(见下)。想开机自启,右键托盘勾选「开机自启」,或把配置里的 autostart 改成 true

配置说明

文件位置(读取优先级,先命中者生效)

  1. exe 同目录 config.ini —— 便携优先,最高优先级
  2. %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+lAlt+LALT+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.dllapi-ms-win-crt-*

版本与发布

  • 版本号在 CMakeLists.txtproject(... 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 开源。

About

无界面、单文件、零运行时依赖的 Windows 黑屏锁屏工具:Alt+L 真黑屏锁定,支持密码解锁与 x64/x86/ARM64

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages