Como eu mudo minha imagem da tela de bloqueio automaticamente?

0

Eu quero que a imagem da minha tela de bloqueio mude automaticamente, por isso é diferente toda vez que eu faço login no meu computador. Eu não gosto da opção de apresentação de slides, pois adiciona um efeito de pan e zoom que me irrita.

Eu fiz uma tentativa para conseguir isso usando um arquivo de lote para substituir a imagem que eu escolhi para o meu fundo com outra foto, no entanto, isso não muda o fundo da tela de bloqueio. O que é ainda mais estranho é que mesmo que eu mude manualmente a imagem, mas mantenha o mesmo nome, quando eu seleciono em configurações como a imagem da tela de bloqueio, ela ficará como a imagem que estava quando eu a selecionei pela primeira vez. Eu não sei por que isso acontece, alguém sabe uma correção para isso, como esta parece ser a única maneira de mudar automaticamente o meu fundo de tela de bloqueio.

Estou no Windows 10

    
por Ethan Gascoigne 26.07.2018 / 22:17

1 resposta

0

Como mencionado em esta outra resposta , quando você define uma imagem da tela de bloqueio, o Windows copia a imagem selecionada para um especial localização, portanto, alterar o arquivo original não alterará a cópia exibida. Provavelmente, há algum armazenamento em cache pelo nome do arquivo original que faz com que ele não seja atualizado quando você seleciona novamente o arquivo de imagem "mesmo". Examinar os valores binários do Registro mencionados nessa resposta parece apoiar a ideia de que o Windows registra o nome do arquivo original.

Como você já tem um script em lotes para girar pelos arquivos de imagem, tudo o que precisamos fazer é fazer com que o Windows atualize a imagem a partir do arquivo de segundo plano atual. Para forçar o Windows a fazer isso, você pode usar o PowerShell! Reunindo os fragmentos que expliquei em minha resposta a uma pergunta semelhante e adicionando alguma lógica para fazer uma cópia nomeada aleatoriamente a cada vez, nós recebemos este script:

# 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

Altere o caminho da imagem na parte superior do script e salve o script como um arquivo .ps1 (por exemplo, lockscr.ps1 ) na mesma pasta do arquivo em lote de embaralhamento de imagens. Se ainda não o fez, siga as instruções na seção Habilitando Scripts do wiki de tags do PowerShell para permitir que os scripts do PowerShell sejam executados . Em seguida, altere seu arquivo em lotes para executar o script do PowerShell depois de fazer imagens em movimento:

powershell -file .\lockscr.ps1
    
por 26.07.2018 / 23:41