ตามที่กล่าวไว้ในคำตอบอื่น ๆ นี้เมื่อคุณตั้งค่ารูปล็อคหน้าจอ 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