# stopsleep **Repository Path**: github-9819409/stopsleep ## Basic Information - **Project Name**: stopsleep - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-10 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## 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 `、`--max `:当未提供 `--delay` 时,使用这两个参数定义范围。默认 `min=10`、`max=50` - `--iterations `:执行次数上限(用于快速验证)。不传表示一直运行,直到手动停止 - `--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` 显示系统通知 对应代码位置: - 参数解析与默认值:`bin/stopsleep.js`(`parseArgs` 与 `main`) - 延迟范围解析(支持 `--delay a,b`):`bin/stopsleep.js` 中 `main` 的范围计算逻辑 - 平台鼠标移动: - Windows:`bin/stopsleep.js` 中调用 PowerShell 的片段 - macOS:`bin/stopsleep.js` 中调用 `osascript` 的片段 - 弹窗提醒: - 调度循环:`bin/stopsleep.js` 中 `schedulePopupReminders` - 平台弹窗显示:`bin/stopsleep.js` 中 `showPopup` ## 注意事项 - 鼠标移动幅度很小(最多 ±8px/±6px),尽量不影响正常操作 - 在 macOS 上,若发现鼠标无法被程序控制,可能需要为终端/命令行工具授予“辅助功能”权限(系统偏好设置 → 隐私与安全性 → 辅助功能) - 程序将持续运行直到手动停止(`Ctrl+C`) ## 许可协议 MIT