Pregunta ¿Cómo cambio la imagen de mi pantalla de bloqueo automáticamente?


Quiero que la imagen de la pantalla de bloqueo cambie automáticamente, por lo que es diferente cada vez que inicio sesión en mi computadora. No me gusta la opción de presentación de diapositivas ya que agrega un efecto de panorámica y zoom que me molesta.

Intenté lograr esto utilizando un archivo por lotes para reemplazar la imagen que elegí por mi fondo con otra imagen, sin embargo, esto no cambia el fondo de la pantalla de bloqueo. Lo que es aún más extraño es que incluso si cambio manualmente la imagen, pero mantengo el mismo nombre, cuando la selecciono en la configuración como la imagen de la pantalla de bloqueo, permanecerá como la imagen que tenía cuando la seleccioné por primera vez. No sé por qué sucede esto, ¿alguien sabe una solución para esto, ya que parece ser la única forma de cambiar automáticamente el fondo de mi pantalla de bloqueo.

Estoy en Windows 10


0


origen


que sistema operativo? - studiohack♦
¿Qué sistema operativo y qué aplicación de bloqueo de pantalla, si no es la provisión del sistema operativo? El sistema probablemente está cargando lo que usa la pantalla de bloqueo, o al menos su configuración, en la memoria y ejecutándola desde allí, por lo que cambiar las especificaciones no afectaría nada hasta la próxima vez que reinicie, o cierre la pantalla de bloqueo y reiníciela. - fixer1234
@ fixer1234 Estoy en Windows 10, lo siento, me olvidé de decir eso, lo he agregado a mi publicación original. ¿Qué quieres decir con reiniciar la pantalla de bloqueo? - Ethan Gascoigne
@EthanGascoigne Bloquea tu sesión usando el menú de inicio o el atajo de teclado - Ramhound
@Ramhound que probé para ver si funcionaba, no lo hizo, la imagen seguía siendo la misma. Si elimino la imagen que seleccioné y luego coloco una imagen completamente diferente con el mismo nombre, volveré a la imagen original. Y si reinicio mi computadora, sigue siendo la imagen original, ¿por qué se queda en esta imagen original? - Ethan Gascoigne


Respuestas:


Como se menciona en esta otra respuestaCuando configura una imagen de la pantalla de bloqueo, Windows copia la imagen seleccionada en una ubicación especial, por lo que modificar el archivo original no cambiará la copia que se muestra. Probablemente haya algo de almacenamiento en memoria caché por nombre de archivo original que hace que no se actualice cuando vuelva a seleccionar el "mismo" archivo de imagen. Buscar en los valores binarios del Registro mencionados en esa respuesta parece apoyar la idea de que Windows registre el nombre de archivo original.

Como ya tiene una secuencia de comandos por lotes para rotar a través de archivos de imagen, todo lo que tenemos que hacer es hacer que Windows actualice la imagen desde el archivo de fondo actual. Para forzar a Windows a hacer eso, ¡puede usar PowerShell! Juntando los fragmentos que expliqué en mi respuesta a una pregunta similar y agregando un poco de lógica para hacer una copia con un nombre aleatorio cada vez, obtenemos 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

Cambie la ruta de la imagen en la parte superior de la secuencia de comandos, luego guarde la secuencia de comandos como una .ps1 archivo (p. ej. lockscr.ps1) en la misma carpeta que la imagen mezclando el archivo por lotes. Si aún no lo ha hecho, siga las instrucciones en la sección Habilitación de scripts de la etiqueta Wiki de PowerShell para permitir la ejecución de scripts de PowerShell. A continuación, modifique su archivo por lotes para ejecutar el script de PowerShell una vez que haya terminado de mover las imágenes:

powershell -file .\lockscr.ps1

0



Los comentarios no son para una discusión extensa; esta conversación ha sido movido al chat. - DavidPostill♦