找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 1194|回复: 13

[系统相关] 【已解决】命令行实时更改“屏幕保护程序”的等待时间

[复制链接]
发表于 2026-1-23 14:20:26 | 显示全部楼层 |阅读模式
本帖最后由 chishingchan 于 2026-1-24 22:32 编辑

此注册表是屏幕保护程序相关的设置,其中 ScreenSaveTimeOut 的值是 1800 秒=30分钟。
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Desktop]
"ScreenSaveActive"="1"
"ScreenSaverIsSecure"="0"
"ScreenSaveTimeOut"="1800"
"SCRNSAVE.EXE"="C:\\Windows\\system32\\FileName.SCR"

例如我想更改此时间值,例如是 900 秒,那么注册表将此值修改为 900 保存后导入注册表即可!
但是,当使用命令行打开“屏幕保护程序设置”时:
  1. rundll32.exe desk.cpl,InstallScreenSaver %SystemRoot%\system32\FileName.scr
复制代码
还是是显示 30 分钟,此操作的结论为等待时间非实时被更改!

请问:使用哪个命令行实时更改屏幕保护程序的等待时间?谢谢!

谢谢 77七 老大的答案:
  1. rundll32.exe user32.dll, UpdatePerUserSystemParameters
复制代码
发表于 2026-1-23 20:51:31 | 显示全部楼层
回复 1# chishingchan

注册表中的某些键值如屏保延时不会修改后立即生效,要系统重启登录后方可,用以下命令直接重启登录...

  1. shutdown /L
复制代码
重启登录后再用 rundll32.exe desk.cpl,InstallScreenSaver %SystemRoot%\system32\FileName.scr 查看屏保延时应该与注册表修改值一致了...
 楼主| 发表于 2026-1-24 13:27:10 | 显示全部楼层
回复 2# aloha20200628

经测试,重启桌面程序也没效!如果要重启,哪就没意思了。
  1. reg add "HKCU\Control Panel\Desktop" /f /v "ScreenSaveTimeOut" /t REG_SZ /D 600
  2. taskkill /f /im explorer.exe
  3. start explorer.exe
复制代码
发表于 2026-1-24 15:26:14 | 显示全部楼层
  1. @echo off
  2. reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f
  3. rundll32.exe user32.dll, UpdatePerUserSystemParameters
  4. pause
复制代码

gemini ai 提供的代码,测试能达到效果。

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 经测试有效!谢谢!

查看全部评分

发表于 2026-1-24 15:30:02 | 显示全部楼层
  1. control desk.cpl,,@screensaver
复制代码

gemini ai  打开用这个命令
发表于 2026-1-24 15:59:06 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-1-24 19:00 编辑

回复 4# 77七

在 win8.1 系统测试无效》回到系统屏保设置界面,其当前屏保值还是未被更新...
发表于 2026-1-24 16:21:59 | 显示全部楼层
回复 6# aloha20200628


  
  1. @echo off
  2. reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 360 /f
  3. rundll32.exe user32.dll, UpdatePerUserSystemParameters
  4. timeout 3
  5. rundll32.exe user32.dll, UpdatePerUserSystemParameters
  6. pause
复制代码
估计是刷新问题,我有时候也不是一次成功。

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 谢谢!

查看全部评分

发表于 2026-1-24 16:27:49 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-1-24 18:59 编辑

回复 7# 77七

最后更新一下测试结果》
在 win8.1, win10 分别跑了多次,win8.1 的结果很不稳定,用时会报错:丢失 UpdatePerUserSystemParameters 条目...,用时根本无效,但偶尔也会生效?
win10 的测试结果与 win8.1 的差别只是没有丢失条目的报错,但成功率也不高(约 20-30%)?
发表于 2026-1-24 21:20:40 | 显示全部楼层
回复 8# aloha20200628


   问了gemini ai,说这个是一个“陈旧”且非官方化的黑进系统的方式。
然后给了个ps代码,测试100%成功。


  1. <# :
  2. cls&echo off&cd /d "%~dp0"
  3. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
  4. exit
  5. #>
  6. $code = @"
  7. using System;
  8. using System.Runtime.InteropServices;
  9. public class ScreenSaver {
  10.     [DllImport("user32.dll", CharSet = CharSet.Auto)]
  11.     public static extern bool SystemParametersInfo(int uAction, int uParam, ref int lpvParam, int fuWinIni);
  12.     public const int SPI_SETSCREENSAVETIMEOUT = 15;
  13.     public const int SPIF_SENDWININICHANGE = 2;
  14.     public static void SetTimeout(int seconds) {
  15.         int result = 0;
  16.         SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, seconds, ref result, SPIF_SENDWININICHANGE);
  17.     }
  18. }
  19. "@
  20. Add-Type -TypeDefinition $code
  21. [ScreenSaver]::SetTimeout(300) # 这里的300就是你想要的秒数
复制代码
发表于 2026-1-25 23:43:56 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-1-26 10:56 编辑

回复 3# chishingchan
回复 4# 77七

用9楼( 谢谢77七 !)的AI线索深追》可知 powershell 搬运的 c# 代码段调用了系统内部函数 SystemParametersInfo(被微软官方公开支持,已用 win7-11 测试通过),该方法能绕过系统屏保设置程序和注册表修改,直接设置屏保时间,其结果会立即更新前二者(再无以前用 rundll32 的摇摆不定  )。参见以下示例代码(存为 test.bat 运行),先用命令行参数设定变量 t=屏保时间(单位为秒数),若其为空则预设 t=300 ,代码第4-5行分别获取注册表键值和调用系统屏保设置程序用来验证结果...

  1. <# ::
  2. @echo off & if "%~1"=="" (set "t=300") else (set "t=%~1")
  3. if %t% leq 0 (exit/b) else powershell -nop -c "$t='%t%'; iex(${%~f0}|out-string)"
  4.   reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut
  5.   control desk.cpl,,@screensaver
  6. pause&exit/b
  7. #>
  8. Add-Type @"
  9. using System.Runtime.InteropServices;
  10. public class x {
  11.    [DllImport("user32.dll")]
  12.    public static extern bool SystemParametersInfo(int a, int b, int c, int d);
  13.    public static void y (int seconds) { SystemParametersInfo(15, seconds, 0, 3); } }
  14. "@
  15. $t=$t -as [int]; if ($t -and $t -gt 0) { [x]::y($t) }; exit
复制代码

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 第1行及第7行以下都不懂。

查看全部评分

 楼主| 发表于 2026-1-27 15:18:01 | 显示全部楼层
回复 10# aloha20200628


    经实践,的确跟你说的一样:再无以前用 rundll32 的摇摆不定!
重启后执行批处理,时间值与窗口的值不一致!
 楼主| 发表于 2026-1-27 15:45:29 | 显示全部楼层
回复 10# aloha20200628

我整理后的完整脚本,请老大看看还有没有改动的地方,谢谢!
  1. <# ::
  2. if not "%1"=="hide" mshta VBScript:CreateObject("WScript.Shell").Run("""%~f0"" hide",0)(Close)&&exit
  3. title 计算机属性 -^> 性能信息和工具 -^> 调整电源设置 -^> 平衡(推荐):更改计划设置 -^> 关闭显示器:从不、使计算机进入睡眠状态:从不
  4. cd /d %~dp0
  5. :: 选择电源计划:平衡(推荐)
  6. powercfg -setactive 381b4222-f694-41f0-9685-ff5bb260df2e
  7. :: 关闭显示器:从不
  8. powercfg -change -monitor-timeout-ac 0
  9. :: 使计算机进入睡眠状态:从不
  10. powercfg -change -standby-timeout-ac 0
  11. :: 设置屏保等待时间(秒)
  12. set Time=1800
  13. :: 注册表
  14. reg add "HKCU\Control Panel\Desktop" /f /v "ScreenSaveTimeOut" /t REG_SZ /d "%Time%"
  15. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "RegCode" /t REG_BINARY /d 00
  16. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "Version" /t REG_SZ /d "3.3"
  17. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "VersionStr" /t REG_SZ /d "20A12.3.3.6381"
  18. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "WorkDir" /t REG_SZ /d "%APPDATA%\Marine Aquarium 3"
  19. :: 复制文件
  20. if %PROCESSOR_ARCHITECTURE%==AMD64 (
  21. reg add "HKLM\SOFTWARE\Wow6432Node\SereneScreen\MarineAquarium3" /f /v "RegCode" /t REG_BINARY /d 00
  22. reg add "HKLM\SOFTWARE\Wow6432Node\SereneScreen\MarineAquarium3" /f /v "Version" /t REG_SZ /d "3.3"
  23. reg add "HKLM\SOFTWARE\Wow6432Node\SereneScreen\MarineAquarium3" /f /v "VersionStr" /t REG_SZ /d "20A12.3.3.6381"
  24. copy /y MarineAquarium3.scr %SystemRoot%\System32\
  25. copy /y MarineAquarium3.scr %SystemRoot%\SysWOW64\
  26. ) else (
  27. reg add "HKLM\SOFTWARE\SereneScreen\MarineAquarium3" /f /v "RegCode" /t REG_BINARY /d 00
  28. reg add "HKLM\SOFTWARE\SereneScreen\MarineAquarium3" /f /v "Version" /t REG_SZ /d "3.3"
  29. reg add "HKLM\SOFTWARE\SereneScreen\MarineAquarium3" /f /v "VersionStr" /t REG_SZ /d "20A12.3.3.6381"
  30. copy /y MarineAquarium3.scr %SystemRoot%\System32\
  31. )
  32. powershell -nop -c "$Time='%Time%'; iex(${%~f0}|out-string)"
  33. :: 安装屏保
  34. rundll32.exe desk.cpl,InstallScreenSaver %SystemRoot%\system32\MarineAquarium3.scr
  35. #>
  36. Add-Type @"
  37. using System.Runtime.InteropServices;
  38. public class x {
  39.    [DllImport("user32.dll")]
  40.    public static extern bool SystemParametersInfo(int a, int b, int c, int d);
  41.    public static void y (int seconds) { SystemParametersInfo(15, seconds, 0, 3); } }
  42. "@
  43. $Time=$Time -as [int]; if ($Time -and $Time -gt 0) { [x]::y($Time) }; exit
复制代码
 楼主| 发表于 2026-1-27 15:49:33 | 显示全部楼层
弄这个的原因:
最近玩安卓模拟器,往往在看剧的时候,黑屏了;或者是平常的电脑长亮为了保护屏幕。
而且 MarineAquarium3.scr 屏保算是最美的一个!
发表于 2026-1-27 19:30:19 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-1-27 19:37 编辑

回复 12# chishingchan

   代码中有行首缩进的均为修改之处(仅供参考),有些是对操作流程的重复性及同类合并的修改,一目了然。
   未改部分尤其是注册表操作代码仍需楼主验证。
   以下针对 '用隐藏方式重启本脚本的方法' 略作说明》
   一。建议改用 powershell 方法(兼容脚本路径包含空格)替换 mshta+vbs 方法,因后者会引发闪屏,即启运mshta会瞬间开关网页窗口导致的结果,采用 powershell 方法无此缺陷
   二。更正了原方法 mshta+vbs 的句式参数(兼容脚本路径包含空格),但此行暂被注释,以上两者由楼主自择...

  1. <# ::
  2.    @echo off
  3.    if /i not "%~1"=="hide" powershell -nop -c "start -file '%~f0' -arg 'hide' -win hidden" &exit/b
  4.    :: if /i not "%~1"=="hide" mshta VBScript:CreateObject("WScript.Shell").Run("""%~f0"" hide",0,false)(Close) &exit/b
  5. title 计算机属性 -^> 性能信息和工具 -^> 调整电源设置 -^> 平衡(推荐):更改计划设置 -^> 关闭显示器:从不、使计算机进入睡眠状态:从不
  6. cd /d %~dp0
  7. :: 选择电源计划:平衡(推荐)
  8. powercfg -setactive 381b4222-f694-41f0-9685-ff5bb260df2e
  9. :: 关闭显示器:从不
  10. powercfg -change -monitor-timeout-ac 0
  11. :: 使计算机进入睡眠状态:从不
  12. powercfg -change -standby-timeout-ac 0
  13. :: 注册表
  14. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "RegCode" /t REG_BINARY /d 00
  15. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "Version" /t REG_SZ /d "3.3"
  16. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "VersionStr" /t REG_SZ /d "20A12.3.3.6381"
  17. reg add "HKCU\Software\SereneScreen\MarineAquarium3" /f /v "WorkDir" /t REG_SZ /d "%APPDATA%\Marine Aquarium 3"
  18. if %PROCESSOR_ARCHITECTURE%==AMD64 (
  19. reg add "HKLM\SOFTWARE\Wow6432Node\SereneScreen\MarineAquarium3" /f /v "RegCode" /t REG_BINARY /d 00
  20. reg add "HKLM\SOFTWARE\Wow6432Node\SereneScreen\MarineAquarium3" /f /v "Version" /t REG_SZ /d "3.3"
  21. reg add "HKLM\SOFTWARE\Wow6432Node\SereneScreen\MarineAquarium3" /f /v "VersionStr" /t REG_SZ /d "20A12.3.3.6381"
  22. ) else (
  23. reg add "HKLM\SOFTWARE\SereneScreen\MarineAquarium3" /f /v "RegCode" /t REG_BINARY /d 00
  24. reg add "HKLM\SOFTWARE\SereneScreen\MarineAquarium3" /f /v "Version" /t REG_SZ /d "3.3"
  25. reg add "HKLM\SOFTWARE\SereneScreen\MarineAquarium3" /f /v "VersionStr" /t REG_SZ /d "20A12.3.3.6381"
  26. )
  27.    :: 复制屏保
  28.    copy /y MarineAquarium3.scr %SystemRoot%\System32\
  29.    :: 安装屏保
  30.    reg add "HKCU\Control Panel\Desktop" /f /v "SCRNSAVE.EXE" /t REG_SZ /d %SystemRoot%\system32\MarineAquarium3.scr
  31.    :: 设置屏保等待时间(秒)
  32.    set Time=1800
  33. powershell -nop -c "$Time='%Time%'; iex(${%~f0}|out-string)"
  34.    exit/b
  35. #>
  36. Add-Type @"
  37. using System.Runtime.InteropServices;
  38. public class x {
  39. [DllImport("user32.dll")]
  40. public static extern bool SystemParametersInfo(int a, int b, int c, int d);
  41. public static void y (int seconds) { SystemParametersInfo(15, seconds, 0, 3); } }
  42. "@
  43. $Time=$Time -as [int]; if ($Time -and $Time -gt 0) { [x]::y($Time) }; exit
复制代码

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 谢谢老大!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.034963 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表