¿Cómo configuro el fondo del escritorio en Windows desde un script?

14

En X Windows, tenía un script de recordatorio de 'alarma silenciosa' que cambiaría el color de mi ventana raíz (fondo) a rojo sólido, solo por unos segundos unos momentos antes de volver a cambiarlo. ¿Hay alguna manera de hacerlo para Windows? XP?

Estoy pensando en algún tipo de tarea programada que usa cscript para establecer claves de registro ( HKEY_CURRENT_USER\Control Panel\Desktop). Sin embargo, mis intentos no parecen tener ningún efecto. ¿Qué debo indicar para leer esas entradas de registro y volver a dibujar el escritorio?

gronostaj
fuente

Respuestas:

8

Esto cambia el fondo a través de la línea de comando. Solo guarde esto como un archivo bat. Use bmp o tendrá que actualizar. También establece el fondo de pantalla para estirarlo. Si saca la línea de fondos de pantalla, se centrará automáticamente.

@echo off
reg add "HKCU\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f 
reg add "HKCU\control panel\desktop" /v wallpaper /t REG_SZ /d "C:\[LOCATION OF WALLPAPER HERE]" /f 
reg delete "HKCU\Software\Microsoft\Internet Explorer\Desktop\General" /v WallpaperStyle /f
reg add "HKCU\control panel\desktop" /v WallpaperStyle /t REG_SZ /d 2 /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 
exit
Alex
fuente
Puede que tenga que eliminar HKCU\Control Panel\Desktop\TranscodedImageCacheantes de actualizar.
Michel de Ruiter
¿El fondo de pantalla debe estar en la computadora local o puede estar en una computadora diferente en la red como \\ server \ share \ wallpaper.bmp?
Ricardo Bohner
6

Creo que una vez que modifique la configuración del fondo de pantalla en el registro, simplemente necesita ejecutar

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

desde la línea de comando y los cambios deberían tener efecto. Debe asegurarse de que su imagen sea un archivo bmp.

De hecho, acabo de intentar esto creando un archivo bmp de tamaño de escritorio que era todo rojo. Cambié la clave // ​​HKCU / panel de control / escritorio / fondo de pantalla para contener la ruta completa a este mapa de bits. Ejecuté el comando anterior desde la línea de comando y el escritorio cambió al bmp rojo que acabo de crear

marca
fuente
funciona bien para mí para eliminar la imagen, pero cuando intenté cambiar el color de fondo en "HKCU \ Control Panel \ Colors \ Background" no lo hizo.
Peter Hahndorf
4

Aquí hay una opción. Cree una pequeña aplicación de consola con SharpDevelop. Pon este código en Programs.cs. Llamo a la aplicación "CWP"; Cambiar el fondo de pantalla. Solo se necesita un parámetro en la línea de comandos: el nombre del archivo. Probado en Windows 7 Ultimate de 64 bits con .bmp -file.

    /*
     * Created by SharpDevelop.
     * Date: 21.9.2012
     * Time: 16:13
     */
    using System;
    using System.Data;
    using System.Text;
    using System.Runtime.InteropServices;

    namespace cwp
    {

       class Program
        {
           [DllImport("user32.dll")]
           public static extern Int32 SystemParametersInfo(
               UInt32 action, UInt32 uParam, String vParam, UInt32 winIni);

            public static readonly UInt32 SPI_SETDESKWALLPAPER  = 0x14;
            public static readonly UInt32 SPIF_UPDATEINIFILE    = 0x01;
            public static readonly UInt32 SPIF_SENDWININICHANGE = 0x02;

            public static void SetWallpaper(String path)
            {
                Console.WriteLine("Setting wallpaper to '" + path + "'");
                SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path,
                    SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
            }

            public static void Main(string[] args)
            {
                if (args.Length >= 1)
                {
                    SetWallpaper( args[0] );
                }
            }
        }
    }
Rayo polar
fuente
1

esto no es tan bueno como pasar tiempo escribiendo código, pero hay una utilidad de sistema bastante útil llamada bginfo que integra información en el fondo del escritorio. es bastante configurable con todo tipo de opciones de línea de comandos. No, no lo escribí.


fuente
0

¡Para Windows 7, funciona incluso en áreas restringidas! ;) Reemplace su ruta de ubicación de imagen con

C: \ Users \ 1509967 \ Desktop \ hi.jpg

reg add "HKEY_CURRENT_USER\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f
reg add "HKEY_CURRENT_USER\control panel\desktop" /v wallpaper /t REG_SZ /d C:\Users\1509967\Desktop\hi.jpg /f
reg add "HKEY_CURRENT_USER\control panel\desktop" /v WallpaperStyle /t REG_SZ /d 2 /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
pause
exit
Anand Varkey Philips
fuente
0

El método de registro no funciona todo el tiempo, especialmente si la imagen no está en formato bmp, por lo que puede probar mi método. Simplemente abra la imagen que desea con el visor de fotos de Windows y use un método abreviado de teclado para establecer la imagen como fondo de escritorio.

Dim wShell
set wShell = createobject("Wscript.shell")
wShell.Run "cmd /c start " & Your photo path here,0,True

do
     wscript.sleep 100
loop until wShell.appactivate("Windows Photo Viewer") = true

wShell.Sendkeys  ("+{F10}")
WScript.Sleep 100
wShell.Sendkeys  "k"
wShell.Exec "taskkill /im dllhost.exe"

Este es un script vbs pero puedes usar el mismo método usando cmd

TahaEltahawy
fuente
0

No importa si lo intenté, no pude cambiar de manera confiable el fondo de pantalla con regedit y UpdatePerUserSystemParameters (incluso con bucles grandes), así que terminé usando powershell, funciona todo el tiempo.

Ver https://www.joseespitia.com/2017/09/15/set-wallpaper-powershell-function/

Set-Wallpaper.ps1 :

# use powershell.exe Set-Wallpaper.ps1 -Image "<path to image>"

param ([string]$Image="")

Function Set-WallPaper($Image) {
<#
.SYNOPSIS
Applies a specified wallpaper to the current user's desktop

.PARAMETER Image
Provide the exact path to the image

.EXAMPLE
Set-WallPaper -Image "C:\Wallpaper\Default.jpg"

#>

Add-Type -TypeDefinition @" 
using System; 
using System.Runtime.InteropServices;

public class Params
{ 
    [DllImport("User32.dll",CharSet=CharSet.Unicode)] 
    public static extern int SystemParametersInfo (Int32 uAction, 
                                                   Int32 uParam, 
                                                   String lpvParam, 
                                                   Int32 fuWinIni);
}
"@ 

$SPI_SETDESKWALLPAPER = 0x0014
$UpdateIniFile = 0x01
$SendChangeEvent = 0x02

$fWinIni = $UpdateIniFile -bor $SendChangeEvent

$ret = [Params]::SystemParametersInfo($SPI_SETDESKWALLPAPER, 0, $Image, $fWinIni)
}

Set-WallPaper -Image $Image
Joric
fuente
Seguimiento, uno podría intentar llamar a la función así: "rundll32.exe user32.DLL, SystemParametersInfo 20 0 C: \ wallpaper.bmp 1" y funcionó en ese entonces pero ahora no hace nada. Supongo que Microsoft solucionó el error de seguridad y Rundll solo ejecuta métodos específicos.
Joric