菜单栏小工具,让 CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType) 永远返回很小的值,绕过基于系统空闲时间的"离开/隐身"检测(Teams、Slack 等)。
定时向 HID 层注入一个零位移的 mouseMoved 事件(发到 .cghidEventTap):
- 系统空闲计时器被重置 → idle 检测失效
- 光标位置不变、无点击、无按键 → 不影响正常使用
- 注入事件不需要辅助功能权限
./build-app.sh # 编译并打包 DoNotSleep.app(ad-hoc 签名)
open DoNotSleep.app # 运行,出现在菜单栏(咖啡杯图标)菜单功能:启用/暂停、重置间隔(15/30/60/120 秒)、立即重置一次、登录时启动、实时显示当前空闲秒数。
也可以不打包直接跑:
swift run # 菜单栏运行(“登录时启动”需打包后才可用)./DoNotSleep.app/Contents/MacOS/DoNotSleep --self-test等待 3 秒无输入后注入事件,打印注入前后的空闲秒数,验证机制是否生效。