ScreenStay 免费下载

ScreenStay · 使用说明

让屏幕在该亮的时候
保持清醒

ScreenStay 是一个守护屏幕的小工具:音乐或视频播放时阻止屏幕休眠,停止后自动交还给系统。Mac 版常驻菜单栏、读取“正在播放”;Windows 版常驻托盘、读取系统音频会话。

Mac 1.2.3 · macOS 13+ Windows 1.5.3 · Windows 10 / 11 无追踪

01概览

两个版本的核心理念相同:只在真正播放媒体时保持屏幕常亮,没有播放时完全交还系统电源管理;不联网、无账号、无遥测。

Mac 版Windows 版
当前版本1.2.31.5.3
系统macOS 13 及以上(Apple Silicon + Intel)Windows 10 / 11(主程序兼容 Windows 7+)
常驻位置菜单栏任务栏托盘 + WinUI 3 主界面
播放检测系统“正在播放”(Now Playing)WASAPI 音频会话(静音播放也算)
防熄屏方式IOKit 电源断言SetThreadExecutionState
暂停后释放约 1–3 秒10 秒缓冲后释放
额外功能影响熄屏的应用列表、命令行诊断阻止休眠的程序、自动切换浅色 / 深色主题、自检
权限无额外系统权限无需管理员(查看电源请求时需 UAC)

跳转:Mac 版说明 · Windows 版说明

macOSMac 版 · 1.2.3

原生 macOS 菜单栏 App,通用二进制,macOS 13+。

M1功能

只看系统播放列表

严格模式不采样普通音频输出,连续提示音、点击音效和后台声音不会触发。

暂停即释放

读取真实播放状态与播放器进程音频输出,暂停后 1–3 秒内释放电源断言。

菜单栏即开关

单击图标立即开启或关闭;右键打开菜单,查看状态、开机自启和影响熄屏的其他应用。

安静的电源断言

只在需要时创建 PreventUserIdleDisplaySleep 与 PreventUserIdleSystemSleep。

开机自启

通过 SMAppService 注册登录项,可在系统设置中批准或撤销。

不联网

没有账号、遥测或云端请求;所有判断都在本机完成。

M2安装

把 App 放进“应用程序”文件夹并打开即可。第一次打开时,菜单栏会出现一个显示器图标。

  1. 双击 DMG,把 ScreenStay 拖入 Applications。
  2. 打开 ScreenStay,允许它出现在菜单栏。
  3. 需要开机启动时,右键图标并勾选“开机自启”。
如果 Gatekeeper 拦截,请在“系统设置 → 隐私与安全性”中选择“仍要打开”,或执行 xattr -dr com.apple.quarantine /Applications/ScreenStay.app。

M3使用

操作效果
单击菜单栏图标立即开启或关闭防熄屏
右键 / Control + 单击打开设置菜单
菜单 → 保持屏幕常亮总开关,与单击图标等价
菜单 → 仅系统媒体播放时触发严格模式开关,默认开启
菜单 → 开机自启注册或取消登录项

开启保护且媒体正在播放时,图标右侧会出现绿点;关闭开关后图标变暗,不再干预屏幕休眠。

菜单中的“其他影响熄屏的应用”会列出持有 NoDisplaySleepAssertion 或 PreventUserIdleDisplaySleep 的其他进程。macOS 会汇总所有应用的断言,ScreenStay 无法取消别人的防熄屏请求。

M4检测原理

严格模式使用两层只读查询,避免只凭播放速率或静音音频流误判:

  1. 系统 Perl 辅助器:通过 /usr/bin/perl 加载内置的极小 dylib,调用 MRMediaRemoteGetNowPlayingApplicationIsPlaying,取得真实的播放/暂停状态。
  2. JXA 辅助脚本:通过 MRNowPlayingRequest 读取应用名、标题、PID 和 Bundle ID,用于菜单展示。
  3. 电源断言:确认播放后创建 PreventUserIdleDisplaySleep 和 PreventUserIdleSystemSleep。
  4. 回退检测:Perl 不可用时,使用 PlaybackRate、播放器进程音频输出和 isCurrentlyPlaying 组合判断。
macOS 15.4 之后,普通第三方 App 直接调用 MediaRemote C 接口会得到过期的 Paused。ScreenStay 不申请辅助功能、屏幕录制或麦克风权限,而是使用系统 Perl 作为受信任的读取进程。

M5诊断

App 内置命令行诊断,不需要打开菜单:

# 观察 10 秒检测状态与电源断言
/Applications/ScreenStay.app/Contents/MacOS/ScreenStay --diagnose 10

# 查看当前影响熄屏的其他应用
/Applications/ScreenStay.app/Contents/MacOS/ScreenStay --blockers

# 查看系统 Now Playing 状态
/Applications/ScreenStay.app/Contents/MacOS/ScreenStay --nowplaying

# 查看 / 开启 / 关闭登录项
/Applications/ScreenStay.app/Contents/MacOS/ScreenStay --login-status
/Applications/ScreenStay.app/Contents/MacOS/ScreenStay --enable-login
/Applications/ScreenStay.app/Contents/MacOS/ScreenStay --disable-login

播放音乐时,--nowplaying 应显示 perlIsPlaying=true;暂停后变为 false,同时电源断言释放。

M6隐私与权限

  • 不联网、不上传播放记录或设备信息。
  • 不需要辅助功能、屏幕录制或麦克风权限。
  • 只读访问 macOS 的播放状态与进程音频状态。
  • 菜单栏中的“影响熄屏的应用”只在本机读取电源断言。
  • 偏好设置保存在本机 UserDefaults 中。

M7从源码构建

需要 macOS 13+ 与 Command Line Tools:

cd ScreenStay
./build.sh
open ScreenStay.app

构建脚本会编译 arm64 与 x86_64、合并通用二进制、打包内置 Perl 辅助器,并在临时目录完成 ad-hoc 签名。

重新生成安装包:

./package.sh

M8卸载

  1. 右键菜单栏图标,取消“开机自启”。
  2. 选择“退出 ScreenStay”。
  3. 删除 /Applications/ScreenStay.app。
  4. 可选:执行 defaults delete com.zzerfu.ScreenStay 清理偏好设置。

WindowsWindows 版 · 1.5.3

Windows 10 / 11 托盘工具(原 KeepAwake),约 80 KB 主程序 + 约 37 MB WinUI 3 主界面。

W1功能

智能保持常亮

每 3 秒检测系统音频会话(WASAPI)。检测到播放时阻止屏幕关闭与系统空闲睡眠,屏幕已关会立即点亮;没有播放时撤销请求,交还 Windows 电源管理。

静音也算播放

静音播放时音频会话仍为 Active,静音看视频同样保持常亮;播放停止后再保持 10 秒,避免切歌 / 缓冲时反复切换。

三态托盘图标

红色显示器 = 已开启且检测到播放;绿色 = 已开启、无播放或缓冲中;灰色 = 未开启。

WinUI 3 主界面

Fluent Design / Mica,左侧导航「常规 / 主题 / 阻止休眠的程序 / 使用说明 / 关于」,支持深色模式与高 DPI。

自动切换日间 / 夜间主题

按自定义时间、日出日落或 Windows 夜间模式自动切换应用 + 系统的浅色 / 深色主题。

查看阻止休眠的程序

用中文列出正在阻止屏幕关闭 / 系统睡眠的程序,数据来自 powercfg /requests(需要管理员权限)。

开机自启 · 状态记忆

写入当前用户启动项,无需管理员,不修改电源计划;记住上次开关状态。

单实例 · 弹窗开关

重复运行只会激活主界面;可关闭气泡通知;退出时自动撤销唤醒请求。

W2安装与卸载

  1. 安装版(推荐):双击 ScreenStay-Setup-1.5.3.exe,按向导安装(默认 %LOCALAPPDATA%\Programs\ScreenStay);可选创建桌面快捷方式、开机自动启动、安装后启动。
  2. 便携版:解压 ScreenStay-v1.5.3.zip,直接运行 ScreenStay.exe。依赖 Windows 10/11 自带的 .NET Framework 4.x,无需安装 .NET SDK。
  3. 卸载:在「设置 → 应用 → 已安装的应用」(或控制面板「程序和功能」)中卸载;安装目录和便携包内的 Uninstall.exe 也可以卸载。
安装包未签名;如果 Windows SmartScreen 提示,请选择「更多信息 → 仍要运行」。

手动彻底清理:主界面「常规」关闭开机自启 → 托盘右键「退出」→ 删除程序文件夹;如需清除配置,删除注册表 HKEY_CURRENT_USER\Software\ScreenStay。

W3托盘操作

启动后程序出现在右下角托盘区,默认智能模式已开启。

操作效果
单击托盘图标打开 WinUI 3 主界面(已打开则激活)
双击托盘图标快速开关自动防息屏(不打开主界面)
右键 → 当前状态只读:未开启 / 已开启,无音视频播放 / 已开启,检测到播放 / 已开启,播放暂停缓冲中
右键 → 自动防息屏勾选即开启监测:有音视频播放时保持常亮
右键 → 打开主页面与单击托盘图标相同
右键 → 退出关闭程序,恢复系统默认电源管理

托盘图标被折叠时,点击任务栏右下角的「^」展开,把 ScreenStay 图标拖到任务栏上固定。

W4主界面(WinUI 3)

页面内容
常规当前监测状态(每 2 秒刷新)、当前检测到的播放软件、自动防息屏、开机自动启动、弹窗提醒、查看电源请求入口
主题日间 / 夜间主题的 4 种自动切换方式
阻止休眠的程序查看 Windows 电源请求(需要管理员权限)
使用说明完整使用说明
关于版本、路径与配置信息

主界面与托盘菜单双向同步,修改后主程序约 3 秒内应用;主界面只允许一个窗口,大小会按 DPI 与屏幕自动适配。

主界面需要 Windows App Runtime 2.6.5 和 ScreenStay.Viewer\ 目录;缺少时主界面无法启动,但托盘菜单、自动防息屏与主题自动切换仍正常工作。

W5智能模式与实现原理

判定依据是 Windows 音频会话(与音量合成器中显示的应用相同):默认音频设备上存在 Active 会话即视为正在播放。浏览器(YouTube / B 站 / 网易云 / QQ 音乐)、VLC、PotPlayer、Windows Media Player、Spotify 等都能识别。

// 检测到音视频播放:阻止屏幕关闭 + 系统空闲睡眠
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);

// 没有播放(或关闭 / 退出):撤销请求,交还电源管理
SetThreadExecutionState(ES_CONTINUOUS);
  • 媒体检测:WASAPI IAudioSessionManager2 枚举会话,读取 IAudioSessionControl::GetState。
  • 持续播放时每 3 秒重新申请一次,停止播放 10 秒后释放。
  • 检测到播放时广播 WM_SYSCOMMAND / SC_MONITORPOWER,点亮已关闭的屏幕。
  • 限制:使用 ASIO 或独占直通、不经过 Windows 音频引擎的极少数播放器可能检测不到。

W6开机自启与弹窗提醒

  • 开机自启写入 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run → 值名 ScreenStay,内容 "exe完整路径" --startup,无需管理员。
  • 建议先把程序放到固定位置(如 %LOCALAPPDATA%\Programs\ScreenStay\)再开启;移动 exe 后需在「常规」页重新开关一次。
  • 「关闭 Windows 弹窗提醒」后不再显示启动、开关、自启等气泡通知;设置保存在 HKEY_CURRENT_USER\Software\ScreenStay\Notifications。

W7查看阻止休眠的程序

主界面「阻止休眠的程序」→「获取电源请求(需要管理员权限)」,确认 UAC 后分两类显示:

  • 屏幕显示(阻止屏幕关闭):例如正在播放视频的浏览器、全屏游戏;
  • 系统睡眠(阻止系统睡眠):例如下载工具、会议软件、后台服务。

默认只显示程序名(如 chrome.exe);点「显示详细信息」查看原始 powercfg /requests 输出,「复制到剪贴板」会复制摘要与原始输出。Windows 只允许管理员读取电源请求,所以每次都会弹出 UAC;点「否」只取消本次查看。

W8自动切换日间 / 夜间主题

方式说明
自定义时间固定的「日间开始 / 夜间开始」时间
日出日落(自动定位)调用 Windows 定位服务获取经纬度,自动计算日出 / 日落
日出日落(手动选择城市)内置 50 个常用城市,按当地经纬度计算
跟随 Windows 夜间模式夜间模式开启用深色、关闭用浅色;读取失败回退自定义时间
  • 修改后自动保存,开启后约 10–15 秒生效;同时切换应用主题与系统主题(任务栏 / 开始菜单)。
  • 日出日落采用 NOAA 简化算法,精度约 1–2 分钟;极昼 / 极夜或坐标无效时回退固定时间。
  • 只在切换点切换一次,手动改过的主题会保持到下一个切换点;目前不切换壁纸。
  • 与 Auto Dark Mode / PowerToys Light Switch 同时运行会互相覆盖,请只保留一个。
  • 自动定位需在「设置 → 隐私和安全性 → 位置」中允许桌面应用访问位置。

W9常见问题与注意

  • 停止播放后为什么过几秒才恢复? 保留 10 秒缓冲,避免切歌、缓冲时反复申请 / 释放。
  • 屏幕保护程序仍会触发? 本工具阻止的是系统空闲熄屏 / 睡眠,屏保仍可能按用户空闲触发,可在「设置 → 个性化 → 锁屏界面 → 屏幕保护程序」设为「无」。
  • 手动关显示器、合盖、Win+L 仍按系统策略执行。
  • 托盘看不到图标? 点「^」展开,或在任务管理器里确认 ScreenStay.exe 进程。
  • 32 / 64 位? AnyCPU 编译,64 位系统上以 64 位运行。
  • 杀毒软件误报? 程序没有数字签名,可选择「仍要运行」/ 加入信任;源码在 src/ScreenStay.cs。

W10自检与从源码编译

# 自检(退出码 0 = 全部通过)
ScreenStay.exe --selftest 报告.txt

# 编译主程序(只需系统自带 .NET Framework 4.x 的 csc.exe),或双击 build.cmd
powershell -NoProfile -ExecutionPolicy Bypass -File .\build.ps1

# 编译 WinUI 3 主界面(需要 .NET 8 SDK),或双击 viewer\build-viewer.cmd
powershell -NoProfile -ExecutionPolicy Bypass -File .\viewer\build-viewer.ps1

主界面产物输出到 viewer-dist\(约 37 MB),复制为安装目录下的 ScreenStay.Viewer\ 即可。

W11兼容性

  • 主程序:Windows 7 / 8 / 8.1 / 10 / 11(x64 / ARM64),需系统自带 .NET Framework 4.x。
  • WinUI 3 主界面:Windows 10 1809+ / Windows 11(x64),需要 Windows App Runtime 2.6.5。
  • 自动主题依赖 Windows 10 / 11 个性化设置;跟随夜间模式依赖未公开的 CloudStore 数据结构,失败时回退自定义时间。