stopsleep
v0.1.4
Published
CLI:随机移动鼠标以阻止电脑睡眠(Windows/macOS)
Maintainers
Readme
stopsleep
阻止电脑进入睡眠的命令行工具。通过在后台以随机间隔轻微移动鼠标,模拟有人在使用电脑。
特性
- 随机间隔(默认 10–50 秒)轻微移动鼠标,直到手动停止
- 支持 Windows 与 macOS,无需安装 Python 或其他额外环境
- 支持中英文输出:
--lang en|cn(也可用--en/--cn) - 输出运行时间、下次间隔、鼠标移动坐标,并模拟“开发任务”日志
- 支持弹窗提醒:固定或随机间隔弹窗提示休息与喝水(
--popup)
环境要求
Node.js >= 16- Windows:无需额外依赖(通过 PowerShell 控制鼠标)
- macOS:系统内置
osascript(JXA)与 CoreGraphics
安装 stopsleep 模块
- 全局安装:
npm i -g stopsleep - 运行:
stopsleep [参数](示例:stopsleep --lang cn --delay 10,50) - 停止:
Ctrl + C - 卸载:
npm uninstall -g stopsleep
命令行参数
--lang en|cn:设置语言(默认cn)。也支持快捷参数--en与--cn--delay a,b:以逗号分隔(支持中文逗号),定义随机间隔范围(秒)。如--delay 10,50--min <n>、--max <n>:当未提供--delay时,使用这两个参数定义范围。默认min=10、max=50--iterations <n>:执行次数上限(用于快速验证)。不传表示一直运行,直到手动停止--popup [n|a,b]:开启弹窗提醒。n为固定间隔秒数;a,b为随机范围(秒)。不带值默认每1800秒弹窗。Windows 使用系统弹窗(自动 5 秒关闭),macOS 使用系统通知。--popupNote "<文本>":自定义弹窗中“总运行时间”后的提示文案。例如--popupNote "请起身活动并喝水";英文示例:--popupNote "Remember to stretch"。
优先级:当提供 --delay 时会覆盖 --min 与 --max。
使用示例
- 默认中文:
stopsleep
- 指定中文与范围:
stopsleep --lang cn --delay 10,50
- 指定英文:
stopsleep --lang en --min 15 --max 30
- 快速验证(运行两次后退出):
stopsleep --lang en --delay 1,1 --iterations 2
- 开启弹窗(默认 1800 秒):
stopsleep --popup
- 开启弹窗(固定 300 秒):
stopsleep --popup 300
- 开启弹窗(随机 300–600 秒):
stopsleep --popup 300,600
- 自定义弹窗提示文案:
stopsleep --popup 600 --popupNote "请起身活动并喝水"
输出示例
中文:
阻止电脑睡眠:随机轻微移动鼠标
间隔范围:10s - 50s
按 Ctrl+C 手动停止
[00:00:00] 下一次间隔 12s | 鼠标: (100,200) -> (103,205) | 编译模块 成功英文:
Prevent sleep: random slight mouse move
Interval range: 10s - 50s
Press Ctrl+C to stop
[00:00:00] Next interval 12s | Mouse: (100,200) -> (103,205) | Run unit tests Passed技术实现
- Windows:使用 PowerShell 调用
System.Windows.Forms.Cursor获取与设置鼠标位置 - macOS:使用
osascript -l JavaScript(JXA)调用 CoreGraphics,通过CGEventCreateMouseEvent与CGEventPost发送鼠标移动事件 - 弹窗提醒:
- Windows:通过 PowerShell 调用
WScript.Shell.Popup显示系统弹窗(自动 5 秒关闭) - macOS:通过
osascript执行display notification显示系统通知
- Windows:通过 PowerShell 调用
对应代码位置:
- 参数解析与默认值:
bin/stopsleep.js(parseArgs与main) - 延迟范围解析(支持
--delay a,b):bin/stopsleep.js中main的范围计算逻辑 - 平台鼠标移动:
- Windows:
bin/stopsleep.js中调用 PowerShell 的片段 - macOS:
bin/stopsleep.js中调用osascript的片段
- Windows:
- 弹窗提醒:
- 调度循环:
bin/stopsleep.js中schedulePopupReminders - 平台弹窗显示:
bin/stopsleep.js中showPopup
- 调度循环:
注意事项
- 鼠标移动幅度很小(最多 ±8px/±6px),尽量不影响正常操作
- 在 macOS 上,若发现鼠标无法被程序控制,可能需要为终端/命令行工具授予“辅助功能”权限(系统偏好设置 → 隐私与安全性 → 辅助功能)
- 程序将持续运行直到手动停止(
Ctrl+C)
许可协议
MIT
