如何自动更改我的锁屏图片?

如何自动更改我的锁屏图片?

我希望我的锁屏图片能够自动更改,这样每次登录电脑时图片都会不同。我不喜欢幻灯片选项,因为它添加了平移和缩放效果,这让我很烦。

我尝试使用批处理文件将我选择的背景图片替换为另一张图片,但是,这不会改变锁屏背景。更奇怪的是,即使我手动更改图像,但保留相同的名称,当我在设置中选择它作为锁屏图片时,它将保持为我第一次选择它时的图片。我不知道为什么会发生这种情况,有人知道解决这个问题的方法吗,因为这似乎是自动更改我的锁屏背景的唯一方法。

我使用的是 Windows 10

答案1

正如所提到的另一个答案,当您设置锁定屏幕图像时,Windows 会将所选图像复制到特殊位置,因此更改原始文件不会更改显示的副本。原始文件名可能有一些缓存,因此当您重新选择“相同”的图像文件时它不会更新。查看该答案中提到的二进制注册表值似乎支持 Windows 记录原始文件名的想法。

由于您已经有了用于轮换图像文件的批处理脚本,我们需要做的就是让 Windows 从当前背景文件中刷新图像。要强制 Windows 执行此操作,您可以使用 PowerShell!将我在我对类似问题的回答并添加一些逻辑来每次生成一个随机命名的副本,我们得到这个脚本:

# Change this to the path where you keep the desired background image
$imagePath = 'C:\path\to\image.ext'

$newImagePath = [System.IO.Path]::GetDirectoryName($imagePath) + '\' + (New-Guid).Guid + [System.IO.Path]::GetExtension($imagePath)
Copy-Item $imagePath $newImagePath
[Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime] | Out-Null
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}
Function AwaitAction($WinRtAction) {
    $asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and !$_.IsGenericMethod })[0]
    $netTask = $asTask.Invoke($null, @($WinRtAction))
    $netTask.Wait(-1) | Out-Null
}
[Windows.Storage.StorageFile,Windows.Storage,ContentType=WindowsRuntime] | Out-Null
$image = Await ([Windows.Storage.StorageFile]::GetFileFromPathAsync($newImagePath)) ([Windows.Storage.StorageFile])
AwaitAction ([Windows.System.UserProfile.LockScreen]::SetImageFileAsync($image))
Remove-Item $newImagePath

更改脚本顶部的图像路径,然后将脚本另存为文件.ps1(例如lockscr.ps1)并放在与图像改组批处理文件相同的文件夹中。如果您还没有这样做,请按照启用脚本部分中的说明进行操作PowerShell 标签 wiki以允许 PowerShell 脚本运行。然后修改批处理文件,在完成图像移动后运行 PowerShell 脚本:

powershell -file .\lockscr.ps1

相关内容