Wie in dieser anderen Antwort erwähnt, kopiert Windows das ausgewählte Bild an einem bestimmten Ort, wenn Sie ein Sperrbild festlegen. Wenn Sie also die Originaldatei ändern, wird die angezeigte Kopie nicht geändert. Es gibt wahrscheinlich einige Zwischenspeicherungen nach dem ursprünglichen Dateinamen, die dazu führen, dass es nicht aktualisiert wird, wenn Sie dieselbe Bilddatei erneut auswählen. Das Durchsuchen der in dieser Antwort erwähnten binären Registrierungswerte scheint die Vorstellung zu unterstützen, dass Windows den ursprünglichen Dateinamen aufzeichnet.
Da Sie bereits über ein Batch-Skript zum Durchlaufen von Bilddateien verfügen, müssen Sie lediglich das Bild von Windows aus der Datei mit dem aktuellen Hintergrund aktualisieren. Um Windows dazu zu zwingen, können Sie PowerShell verwenden! Wenn ich die Fragmente, die ich in meiner Antwort auf eine ähnliche Frage erklärt habe, zusammensetze und Logik hinzufüge, um jedes Mal eine zufällig benannte Kopie zu erstellen, erhalten wir dieses Skript:
# 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
Ändern Sie den Bildpfad oben im Skript, und speichern Sie das Skript als .ps1
Datei (z. B. lockscr.ps1
) im selben Ordner wie die Batchdatei für das Mischen von Bildern. Wenn Sie dies noch nicht getan haben, befolgen Sie die Anweisungen im Abschnitt Aktivieren von Skripts des PowerShell-Tag-Wikis, um die Ausführung von PowerShell-Skripts zu ermöglichen. Ändern Sie dann die Batchdatei, um das PowerShell-Skript auszuführen, nachdem Sie die Bilder verschoben haben:
powershell -file .\lockscr.ps1