通过 RDP 禁用 Windows 7 屏幕保护程序

通过 RDP 禁用 Windows 7 屏幕保护程序

如何在 RDP 会话中关闭屏幕保护程序,从而使会话保持活动和解锁状态,即使我在一段时间内没有积极地工作?

笔记:该解决方案应该可以工作,而不会影响控制台本身。请仅使用 RDP 连接。

答案1

我能够使用任务计划程序完成此操作。

  1. 打开任务计划程序。右键单击Task Scheduler LibraryCreate Task

  2. 名称:禁用 RDP 屏幕保护程序

  3. 触发器:新触发器、连接到用户会话时、特定用户(指定用户)、来自远程计算机

  4. 操作:启动程序,

  5. 程序:reg

  6. 参数:add "HKEY_CURRENT_USER\Control Panel\Desktop" /f /v ScreenSaverIsSecure /t REG_SZ /d 0

  7. 打开任务计划程序。右键单击Task Scheduler LibraryCreate Task

  8. 名称:启用 RDP 屏幕保护程序

  9. 触发器:新触发器、断开与用户会话的连接、特定用户(指定用户)、来自远程计算机

  10. 操作:启动程序,

  11. 程序:reg

  12. 参数:add "HKEY_CURRENT_USER\Control Panel\Desktop" /f /v ScreenSaverIsSecure /t REG_SZ /d 1

答案2

您可以使用注册表编辑器 [Regedit.exe从命令行] 并查找并编辑以下键: HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive 如果您的屏幕保护程序当前已启用,则其值为1,将其更改为0以禁用。


在更改注册表项或子项之前,Microsoft 建议您导出或备份该项或子项。您可以将备份副本保存到指定位置,例如硬盘上的文件夹或可移动存储设备。如果您进行了要撤消的更改,则可以导入备份副本。 更多信息请点击此处


答案3

不幸的是,BajaResident 的解决方案实际上不起作用。或者说,第二个任务有效,但第一个任务无效。这是因为 explorer.exe 在登录时在任务运行之前启动,并且 explorer.exe 不知道注册表值已更改。

因此,有 3 种方法可以强制重新加载值:

  1. 按照此解决方案,运行rundll32.exe user32.dll, UpdatePerUserSystemParameters,但是命令非常不一致并且大多数时候不起作用。

  2. 像互联网上的一些帖子一样运行 powershell 脚本,但是所有示例都是关于更改壁纸之类的事情,学习 powershell 和 API 会有些工作量。

  3. 重新启动explorer.exe,但是这会严重影响工作效率。

最后我采用了选项 1 这个比较坑爹的方法,用批处理脚本循环执行while

@echo off


set /a "screenSaverWhileLoop = 1"

:while
    if %screenSaverWhileLoop% lss 10 (
        timeout 2
        rundll32.exe user32.dll, UpdatePerUserSystemParameters
        set /a "screenSaverWhileLoop = screenSaverWhileLoop + 1"
        goto :while
    )

这将每 2 秒执行一次命令,持续 20 秒。

现在的问题是(如果您执行 powershell 脚本也是如此)会出现一个 CLI 窗口。您可以将其最小化启动,但它仍会在那里。

我发现的最佳解决方案是隐藏的开始. 您将从调度程序中hstart64.exe使用参数运行/noconsole "c:\path\to\script.bat"

不确定是否需要,但我还添加了两个调度任务,以ScreenSaveActive在连接时将 reg 更改为 0,在断开连接时将 reg 更改为 1。

将此与 BajaResident 的解决方案相结合,它应该对您有用(至少对我来说是有效的)。我测试了连接后立即断开连接是否会关闭屏幕保护程序,但事实并非如此。似乎重新加载选项仅在您的用户当前已登录时才有效。我想如果您通过 RDP 连接并在 20 秒内通过控制台登录,这会导致问题。

相关内容