我知道我可以通过注册表设置屏幕保护程序值,但这些值在登录时适用。我收集正确的方法是使用SystemParametersInfo函数,然后立即应用更改。
我可以使用以下方法获取并设置屏幕保护程序超时值:
$signature = @"
[DllImport("user32.dll")]
public static extern bool SystemParametersInfo(int uAction, int uParam, ref int lpvParam, int flags );
"@
$systemParamInfo = Add-Type -memberDefinition $signature -Name ScreenSaver -passThru
Function Get-ScreenSaverTimeout
{
[Int32]$value = 0
$systemParamInfo::SystemParametersInfo(14, 0, [REF]$value, 0)
$($value/60)
}
Function Set-ScreenSaverTimeout
{
Param ([Int32]$value)
$seconds = $value * 60
[Int32]$nullVar = 0
$systemParamInfo::SystemParametersInfo(15, $seconds, [REF]$nullVar, 2)
}
来自https://powershellreflections.wordpress.com/2011/08/02/control-your-screensaver-with-powershell/
我正在尝试更改“恢复时,显示登录屏幕”的标志。通过以下方式获取值是成功的:
function Get-ScreenSaverSecure
{
[Int32]$value = 0
$systemParamInfo::SystemParametersInfo(118, 0, [REF]$value, 0)
$value
}
但是,请使用以下值设置值:
Function Set-ScreenSaverSecure
{
[Int32]$nullVar = 0
$systemParamInfo::SystemParametersInfo(119, $true, [REF]$nullVar, 2)
}
未设置标志。从MSDN链接,我想我应该传递SPI_SETSCREENSAVESECURE(这是uiParam 119)$ true或$ false,具体取决于模式,但似乎都不适用。
感谢任何帮助。
答案 0 :(得分:1)
我使用@Tim AtLee的功能,并按如下方式定制:
Function Set-OnResumeDisplayLogon
{
Param ([Int32]$value)
[Int32]$nullVar = 0
$systemParamInfo::SystemParametersInfo(119, $value, [REF]$nullVar, 2)
}
然后通过以下方式调用:
Set-OnResumeDisplayLogon(0)
将“On resume,display logon”标志设置为未选中;或
Set-OnResumeDisplayLogon(1)
将“恢复时,显示登录”标志设置为已选中