擦键盘时总会误触一堆按键?擦触摸板时光标乱跑、窗口乱切?BKCleanHelper 在你擦拭的这一分钟里接管所有输入事件,并且无论发生什么都会让输入自动恢复。
清洁模式全屏界面(示意图)
✨ 特性
- ⌨️ 一键暂停输入:内置键盘、触摸板、外接键盘与鼠标统一暂停
- ⏱️ 60 秒自动恢复:计时由独立子进程负责,不依赖界面是否正常
- 🆘 随时提前结束:同时按住 ⌃ Control ⌥ Option ⌘ Command U 两秒
- 🛡️ 多重兜底:主程序退出、通信断开、锁屏、睡眠、切换用户时都会立即解除
- 👀 先预览再使用:「预览清洁界面」无需授权,看一眼效果(预览时不会屏蔽输入)
- 🍎 原生体验:AppKit、系统字体、SF Symbols,支持浅色与深色外观
- 🔒 完全本地:不联网、不记录输入、不改系统配置、不装驱动
🚀 快速开始
1. 📦 下载安装
- 前往 Releases 下载最新的
BKCleanHelper-版本号.dmg - 双击打开 DMG,把
BKCleanHelper拖到旁边的「Applications」文件夹(之后不要再移动它,否则可能需要重新授权) - 推出 DMG,在「应用程序」中双击打开 BKCleanHelper
支持 macOS 13 及以上,Apple 芯片和 Intel 都能运行(Universal 包)。
[!IMPORTANT] 第一次打开会被 macOS 拦截,提示「无法验证开发者」。这是因为本项目没有付费的 Apple 开发者签名和公证,并不代表应用有问题,源码都在这个仓库里。放行方法:
- macOS 15 及以上:双击后在提示框里点「完成」,然后打开 系统设置 → 隐私与安全性,滚动到「安全性」部分,点击「仍要打开」,输入密码后再次确认「打开」
- macOS 13 / 14:在「应用程序」中右键点击 BKCleanHelper → 「打开」→ 再点「打开」
只需要操作一次。不需要、也不应该为此关闭 SIP 或 Gatekeeper。
🔨 也可以从源码构建
需要 macOS 13 或更新版本,以及 Xcode 16 或更新版本(构建 Universal 包需要完整的 Xcode)。
git clone https://github.com/binbinku/BKCleanHelper.git
cd BKCleanHelper
bash scripts/build.sh
构建完成后得到 outputs/BKCleanHelper.app。自己构建的应用使用本机临时签名,重新构建后可能需要在系统设置里重新授权。
2. 授权
打开应用,在主窗口中分别点击「前往设置…」,在 系统设置 → 隐私与安全性 中允许 BKCleanHelper 使用:
| 权限 | 用途 |
|---|---|
| ♿ 辅助功能 | 拦截并暂停系统投递的输入事件 |
| ⌨️ 输入监控 | 监听键盘、鼠标与触摸板事件(包括提前结束快捷键) |
两项缺一不可,任何一项被撤销,清洁都会立即中断并恢复输入。
如果系统提示退出并重新打开应用,照做即可。两项都显示「已允许」后就可以开始了。
3. 开始清洁
- 在菜单栏图标或主窗口中点击「开始清洁」
- 松开所有按键和鼠标按钮,3 秒准备期间可以取消
- 看到「键盘与触摸板已暂停」后再开始擦拭 🧽
- 60 秒后自动恢复;需要提前结束时,按住 ⌃⌥⌘U 两秒
关闭主窗口后,菜单栏入口仍然保留;退出应用会立即结束清洁并恢复输入。
🛡️ 它为什么不会把你锁在外面
屏蔽输入的工具最怕出问题时“解不开”。BKCleanHelper 把拦截输入和显示界面拆成了两个进程,并且给每个环节都设计了退路:
- 独立的拦截子进程负责事件拦截,截止时间使用连续时钟,睡眠时间也计算在内,不依赖主窗口计时
- 截止时间一到,即使定时器延迟,也会立即放行所有事件,绝不会延长锁定时间
- 主程序退出、通信断开、锁屏、睡眠或切换用户时,拦截会立即解除
- 后台看门狗:子进程超过 2 秒没有心跳,或者总时长超过 64 秒,主程序会强制结束它
- 子进程一旦结束,系统会自动移除它的事件拦截
- 全屏遮罩不接收鼠标事件,避免界面本身变成另一把“锁”
- 权限不足或无法建立完整拦截时拒绝启动,不会只显示一个看起来像在拦截的假遮罩
⚠️ 已知限制
[!WARNING]
- 电源键 / Touch ID 按钮以及硬件强制关机无法屏蔽,擦拭时请避开它们。
- 应用拦截的是系统投递的输入事件,并不切断硬件供电,触摸板仍可能产生触感反馈。
- 多指系统手势、特殊功能键、第三方手势工具、安全输入场景等,需要在你的 Mac 上实际验证,系统更新或其他输入工具也可能影响拦截范围。第一次正式使用前,建议先打开一个空白文档,试试普通按键、系统快捷键、触摸板滚动和多指手势。
- 系统中途中断拦截时,本轮清洁会立即结束,并提示你停止擦拭。
🔒 隐私
- 🚫 不联网
- 🚫 不记录、不回放任何输入内容
- 🚫 不修改系统键盘或触摸板设置
- 🚫 不安装驱动或常驻特权服务
❓ 常见问题
如果真的“卡住”了怎么办?
按顺序尝试:
- 等待:60 秒后一定会自动恢复(看门狗兜底上限为 64 秒)
- 按住 ⌃⌥⌘U 两秒
- 合上屏幕或让 Mac 进入睡眠,锁屏和睡眠都会立即解除拦截
- 最后的办法:长按电源键强制关机(电源键不受影响)
升级新版本或重新构建后,权限显示“未授权”?
应用没有固定的开发者签名,每个新版本都可能被系统当成新的应用。在 系统设置 → 隐私与安全性 的「辅助功能」和「输入监控」中,删除旧的 BKCleanHelper 条目,再重新添加即可。
为什么提示“请松开所有按键和鼠标按钮”?
如果开始拦截时还有按键或鼠标按钮处于按下状态,它“抬起”的事件会被拦截掉,系统就会以为这个键一直按着。所以准备结束后,BKCleanHelper 会等你松开所有按键再开始;超过 8 秒仍未松开,本轮就会取消。
支持 Intel Mac 吗?
支持。发布的是 Universal 包,Apple 芯片和 Intel 都能原生运行。如果你在 Intel Mac 上遇到问题,欢迎反馈 🙌
🛠️ 开发
.
├── Sources/
│ ├── BKCleanHelper/ # App 主程序:菜单栏、主窗口、遮罩、拦截子进程
│ └── CleanCore/ # 纯逻辑:截止时间、提前结束检测、心跳与看门狗
├── Tests/CleanCoreTests/
├── Resources/Info.plist
├── scripts/
│ ├── build.sh # 构建 .app、生成图标、临时签名并打包
│ ├── check.sh # 单元测试 + 子进程模拟测试
│ ├── test_worker.py
│ ├── Icon.swift # 生成 App 图标
│ └── package_icon.py
└── Package.swift
bash scripts/check.sh # 测试
bash scripts/build.sh # 构建 outputs/BKCleanHelper.app
可以用 Xcode 打开 Package.swift 阅读和调试源码;日常运行请使用构建出来的 .app,这样权限归属才稳定。
🧪 模拟测试不会真正拦截键鼠,覆盖范围包括:精确截止时间、持续按住才能提前结束、重复停止、父进程断开、子进程暂停后恢复、输出管道断开、无效命令。
📋 实机验收清单
真实的输入屏蔽需要用户手动授权,模拟测试不能代替实机验收。发布前建议逐项检查:
- 普通键、修饰键
- ⌘Tab、⌘Space
- 音量、亮度键
- 指针移动、点击、拖动
- 双指滚动、缩放、旋转
- 三指、四指手势
- 外接键盘与鼠标
- 60 秒自动恢复
- ⌃⌥⌘U 提前结束
- 清洁中撤销权限
- 正常退出、异常退出
- 睡眠与唤醒
- 多显示器
🤝 参与贡献
欢迎提交 Issue 和 Pull Request!
- 🐛 报告问题时,请附上 macOS 版本、机型,以及是否接了外接键鼠
- 🔧 提交代码前请运行
bash scripts/check.sh - ⌨️ 涉及输入拦截的改动,请在实机上按上面的验收清单检查一遍
📄 许可证
本项目基于 MIT License 开源。