Как автоматически изменить изображение на экране блокировки?

925
Ethan Gascoigne

Я хочу, чтобы изображение на экране блокировки автоматически менялось, поэтому оно меняется каждый раз, когда я захожу на компьютер. Мне не нравится опция слайд-шоу, так как она добавляет эффект панорамирования и масштабирования, который меня раздражает.

Я попытался добиться этого с помощью командного файла, чтобы заменить изображение, которое я выбрал для фона, другим изображением, однако это не меняет фон экрана блокировки. Что еще более странно, это то, что даже если я вручную изменю изображение, но сохраню то же имя, когда я выберу его в настройках в качестве изображения экрана блокировки, оно останется таким же, каким оно было при первом выборе. Я не знаю, почему это происходит, кто-нибудь знает, как это исправить, поскольку это единственный способ автоматически изменить фон экрана блокировки.

Я на Windows 10

0
какая операционная система? studiohack 5 лет назад 0
Какая операционная система и какое приложение для экрана блокировки, если оно не предусмотрено операционной системой? Система, вероятно, загружает то, что использует экран блокировки, или, по крайней мере, его настройки, в память и запускает его оттуда, поэтому изменение спецификаций ни на что не повлияет до следующего перезапуска или закрытия экрана блокировки и его перезапуска. fixer1234 5 лет назад 0
@ fixer1234 Я нахожусь на Windows 10, извините, я забыл сказать, что я добавил его в свой оригинальный пост. Что вы имели ввиду под перезагрузкой экрана блокировки? Ethan Gascoigne 5 лет назад 0
@EthanGascoigne Заблокируйте сеанс с помощью меню «Пуск» или сочетания клавиш Ramhound 5 лет назад 0
@ Ramhound Я проверил, сработало ли это, не сработало, изображение осталось прежним. Если я удаляю выбранное изображение, а затем помещаю туда совершенно другое изображение с тем же именем, оно вернется к исходному изображению. И если я перезагружаю свой компьютер, это все еще оригинальное изображение, почему оно остается на этом оригинальном изображении? Ethan Gascoigne 5 лет назад 0

1 ответ на вопрос

-1
Ben N

Как уже упоминалось в этом другом ответе, когда вы устанавливаете изображение экрана блокировки, 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, чтобы разрешить запуск сценариев PowerShell. Затем измените пакетный файл, чтобы он запускал скрипт PowerShell после перемещения изображений:

powershell -file .\lockscr.ps1 
Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат] (https://chat.stackexchange.com/rooms/80777/discussion-on-answer-by-ben-n-how-do-i-change-my-lock-screen- картинка-автоматический). DavidPostill 5 лет назад 0