Questão Como faço para alterar a imagem da tela de bloqueio automaticamente?


Eu quero que a imagem da minha tela de bloqueio mude automaticamente, então é 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 escolho 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


0


origem


qual sistema operacional? - studiohack♦
Qual sistema operacional e qual aplicativo de tela de bloqueio se for diferente da provisão do sistema operacional? O sistema provavelmente está carregando o que a tela de bloqueio usa, ou pelo menos suas configurações, na memória e a executá-lo a partir dali, portanto, alterar as especificações não afetará nada até a próxima reinicialização ou fechar a tela de bloqueio e reiniciá-la. - fixer1234
@ fixer1234 Eu estou no Windows 10, desculpe, eu esqueci de dizer isso, eu adicionei ao meu post original. O que você quis dizer com reiniciar a tela de bloqueio? - Ethan Gascoigne
@EthanGascoigne Bloqueie sua sessão usando o menu Iniciar ou o atalho do teclado - Ramhound
@Ramhound Eu testei para ver se isso funcionava, não, a imagem ainda era a mesma. Se eu excluir a imagem que eu selecionei e, em seguida, colocar uma imagem completamente diferente lá com o mesmo nome, ele voltará para a imagem original. E se eu reiniciar o meu computador ainda é a imagem original, por que está hospedado nesta imagem original? - Ethan Gascoigne


Respostas:


Como mencionado em esta outra resposta, quando você define uma imagem da tela de bloqueio, o Windows copia a imagem selecionada para um local especial, portanto, alterar o arquivo original não altera 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". Percorrer os valores do Registro binário mencionados nessa resposta parece apoiar a ideia de que o Windows registra o nome do arquivo original.

Como você já tem um script em lote 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, obtemos 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 .ps1 arquivo (por exemplo, lockscr.ps1) na mesma pasta que o arquivo de lote de embaralhamento de imagens. Se você ainda não o fez, siga as instruções na seção Habilitando Scripts do o wiki da tag do PowerShell para permitir que 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

0



Comentários não são para discussão extensa; esta conversa foi mudou-se para conversar. - DavidPostill♦