如何在 RDP 会话中关闭屏幕保护程序,从而使会话保持活动和解锁状态,即使我在一段时间内没有积极地工作?
笔记:该解决方案应该可以工作,而不会影响控制台本身。请仅使用 RDP 连接。
答案1
我能够使用任务计划程序完成此操作。
打开任务计划程序。右键单击
Task Scheduler Library
并Create Task
名称:禁用 RDP 屏幕保护程序
触发器:新触发器、连接到用户会话时、特定用户(指定用户)、来自远程计算机
操作:启动程序,
程序:
reg
参数:
add "HKEY_CURRENT_USER\Control Panel\Desktop" /f /v ScreenSaverIsSecure /t REG_SZ /d 0
打开任务计划程序。右键单击
Task Scheduler Library
并Create Task
名称:启用 RDP 屏幕保护程序
触发器:新触发器、断开与用户会话的连接、特定用户(指定用户)、来自远程计算机
操作:启动程序,
程序:
reg
参数:
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 种方法可以强制重新加载值:
按照此解决方案,运行
rundll32.exe user32.dll, UpdatePerUserSystemParameters
,但是命令非常不一致并且大多数时候不起作用。像互联网上的一些帖子一样运行 powershell 脚本,但是所有示例都是关于更改壁纸之类的事情,学习 powershell 和 API 会有些工作量。
重新启动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 秒内通过控制台登录,这会导致问题。