从命令行在 Windows 上静默设置屏幕保护程序?
Silently set the screensaver on Windows from the command line?
我知道如果你 运行:
rundll32.exe desk.cpl,InstallScreenSaver toasters.scr
您可以将屏幕保护程序设置为 toasters.scr
,但它也会打开屏幕保护程序配置对话框。有没有办法通过 运行 命令在 Windows 上设置屏幕保护程序而无需打开任何对话框?
而不是运行宁那个命令你应该运行命令
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\system32\toasters.scr /f
这将更新屏幕保护程序
我找到了两种方法:
1) 在注册表中添加,确保处于活动状态并设置超时(仅分钟)
命令
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\Mystify.scr /f
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 60 /f
JAVA
setScreenSaver(true, 1, "C:\Windows\System32\Mystify.scr");
/**
* set screen saver active, timeout and scr, only works in Windows
* @param isActive
* @param timeOutMin only minutes
* @param pathToScr path to scr
* @throws IOException
*/
public static void setScreenSaver(boolean isActive, int timeOutMin, String pathToScr) throws IOException{
String _isActive = isActive ? "1" : "0";
//only works with minutes, min. 1 min
String _timeOut = timeOutMin > 1 ? timeOutMin*60+"" : "60";
Runtime.getRuntime().exec(new String[] { "reg", "add", "HKEY_CURRENT_USER\Control Panel\Desktop", "/v", "SCRNSAVE.EXE", "/t", "REG_SZ", "/d", pathToScr,"/f" });
Runtime.getRuntime().exec(new String[] { "reg", "add", "HKEY_CURRENT_USER\Control Panel\Desktop", "/v", "ScreenSaveActive", "/t", "REG_SZ", "/d", _isActive,"/f" });
Runtime.getRuntime().exec(new String[] { "reg", "add", "HKEY_CURRENT_USER\Control Panel\Desktop", "/v", "ScreenSaveTimeOut", "/t", "REG_SZ", "/d", _timeOut,"/f" });
}
2) 从注册表中获取路径并重写scr文件,但如果设置为空,则无法执行。
现代方式,使用 powershell
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name ScreenSaveActive -Value 1
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name ScreenSaveTimeOut -Value 60
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name scrnsave.exe -Value "c:\windows\system32\mystify.scr"
您可以将它们放在 ScrnInstaller.ps1
脚本中,您可以使用以下命令执行该脚本:
$ powershell -WindowStyle hidden -f "ScrnInstaller.ps1"
注意: 这些参数被组策略参数取代(例如,强制为企业用户设置屏幕保护程序)。你有几种方法来强制它 here.
具有用户/域/站点感知:组策略
使用 powershell 和组策略,您可以管理影响更改的组织单位/域/站点,并且它优先于用户设置。
在屏幕保护程序超时的情况下更改组策略:
Get-Command -Module GroupPolicy
New-GPO -Name "ScreenSaverTimeOut" -Comment "Sets the time to 900 seconds"
Set-GPRegistryValue -Name "ScreenSaverTimeOut" -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName ScreenSaveTimeOut -Type DWord -Value 900
New-GPLink -Name "ScreenSaverTimeOut" -Target "ou=MyOU,dc=myenterprise,dc=com"
gpupdate /force /target:computer
为 myenterprise.com。对于新 GPLink 参数:msdn reference
然后您可以查看您的全科医生:
Get-GPO -Name "ScreenSaverTimeOut" | Get-GPOReport -ReportType HTML -Path $Home\report.html
Invoke-Item $Home\report.html
c:\Windows\System32\scrnsave.scr -start
上面的批处理文件会启动空白屏幕保护程序。
优点;
将 scrnsave.scr 替换为 C:\Windows\system32\ 中的其他 5 个屏幕保护程序之一也同样有效。
您不需要重新启动系统,它会立即启动。
缺点;
我不知道如何设置超时。我怀疑像 c:\Windows\System32\scrnsave.scr /ScreenSaveTimeOut = 150 -start
这样的行会有争论
我认为需要一个单独的批处理文件来停止屏幕保护程序。
我知道如果你 运行:
rundll32.exe desk.cpl,InstallScreenSaver toasters.scr
您可以将屏幕保护程序设置为 toasters.scr
,但它也会打开屏幕保护程序配置对话框。有没有办法通过 运行 命令在 Windows 上设置屏幕保护程序而无需打开任何对话框?
而不是运行宁那个命令你应该运行命令
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\system32\toasters.scr /f
这将更新屏幕保护程序
我找到了两种方法:
1) 在注册表中添加,确保处于活动状态并设置超时(仅分钟)
命令
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\Windows\System32\Mystify.scr /f
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 60 /f
JAVA
setScreenSaver(true, 1, "C:\Windows\System32\Mystify.scr");
/**
* set screen saver active, timeout and scr, only works in Windows
* @param isActive
* @param timeOutMin only minutes
* @param pathToScr path to scr
* @throws IOException
*/
public static void setScreenSaver(boolean isActive, int timeOutMin, String pathToScr) throws IOException{
String _isActive = isActive ? "1" : "0";
//only works with minutes, min. 1 min
String _timeOut = timeOutMin > 1 ? timeOutMin*60+"" : "60";
Runtime.getRuntime().exec(new String[] { "reg", "add", "HKEY_CURRENT_USER\Control Panel\Desktop", "/v", "SCRNSAVE.EXE", "/t", "REG_SZ", "/d", pathToScr,"/f" });
Runtime.getRuntime().exec(new String[] { "reg", "add", "HKEY_CURRENT_USER\Control Panel\Desktop", "/v", "ScreenSaveActive", "/t", "REG_SZ", "/d", _isActive,"/f" });
Runtime.getRuntime().exec(new String[] { "reg", "add", "HKEY_CURRENT_USER\Control Panel\Desktop", "/v", "ScreenSaveTimeOut", "/t", "REG_SZ", "/d", _timeOut,"/f" });
}
2) 从注册表中获取路径并重写scr文件,但如果设置为空,则无法执行。
现代方式,使用 powershell
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name ScreenSaveActive -Value 1
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name ScreenSaveTimeOut -Value 60
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name scrnsave.exe -Value "c:\windows\system32\mystify.scr"
您可以将它们放在 ScrnInstaller.ps1
脚本中,您可以使用以下命令执行该脚本:
$ powershell -WindowStyle hidden -f "ScrnInstaller.ps1"
注意: 这些参数被组策略参数取代(例如,强制为企业用户设置屏幕保护程序)。你有几种方法来强制它 here.
具有用户/域/站点感知:组策略
使用 powershell 和组策略,您可以管理影响更改的组织单位/域/站点,并且它优先于用户设置。
在屏幕保护程序超时的情况下更改组策略:
Get-Command -Module GroupPolicy
New-GPO -Name "ScreenSaverTimeOut" -Comment "Sets the time to 900 seconds"
Set-GPRegistryValue -Name "ScreenSaverTimeOut" -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName ScreenSaveTimeOut -Type DWord -Value 900
New-GPLink -Name "ScreenSaverTimeOut" -Target "ou=MyOU,dc=myenterprise,dc=com"
gpupdate /force /target:computer
为 myenterprise.com。对于新 GPLink 参数:msdn reference
然后您可以查看您的全科医生:
Get-GPO -Name "ScreenSaverTimeOut" | Get-GPOReport -ReportType HTML -Path $Home\report.html
Invoke-Item $Home\report.html
c:\Windows\System32\scrnsave.scr -start
上面的批处理文件会启动空白屏幕保护程序。
优点;
将 scrnsave.scr 替换为 C:\Windows\system32\ 中的其他 5 个屏幕保护程序之一也同样有效。
您不需要重新启动系统,它会立即启动。
缺点;
我不知道如何设置超时。我怀疑像 c:\Windows\System32\scrnsave.scr /ScreenSaveTimeOut = 150 -start
这样的行会有争论
我认为需要一个单独的批处理文件来停止屏幕保护程序。