Come posso impostare lo sfondo del desktop su Windows da uno script?


14

Su X Windows ho avuto un fantastico script di promemoria "silent-alarm" che avrebbe cambiato il colore della mia finestra principale (sfondo) in rosso fisso, solo per alcuni secondi qualche istante prima di cambiarlo. C'è un modo per farlo per Windows XP?

Sto pensando a una sorta di attività pianificata che utilizza cscript per impostare le chiavi di registro ( HKEY_CURRENT_USER\Control Panel\Desktop). Tuttavia, i miei tentativi non sembrano avere alcun effetto. Cosa devo segnalare per leggere quelle voci di registro e ridisegnare il desktop?

Risposte:


8

Questo cambia lo sfondo dalla riga di comando. Basta salvarlo come file bat. Usa bmp o dovrai aggiornare. Imposta anche lo sfondo da allungare. Se estrai la linea di sfondi sarà automaticamente centrata.

@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

Potrebbe essere necessario rimuovere HKCU\Control Panel\Desktop\TranscodedImageCacheprima dell'aggiornamento.
Michel de Ruiter,

Lo sfondo deve trovarsi sul computer locale o può essere su un altro computer della rete come \\ server \ share \ wallpaper.bmp?
Ricardo Bohner,

6

Penso che una volta modificata l'impostazione dello sfondo nel registro, sia sufficiente eseguire

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

dalla riga di comando e le modifiche dovrebbero avere effetto. Devi assicurarti che l'immagine sia un file bmp.

In effetti, ho appena provato questo creando un file bmp di dimensioni desktop tutto rosso. Ho cambiato la chiave // ​​HKCU / control panel / desktop / wallpaper per contenere il percorso completo di questa bitmap. Ho eseguito il comando sopra dalla riga di comando e il desktop è cambiato nel bmp rosso che ho appena creato


funziona bene per me per rimuovere l'immagine, ma quando ho provato a cambiare il colore di sfondo in "HKCU \ Pannello di controllo \ Colori \ Sfondo" non lo fa.
Peter Hahndorf,

4

Ecco un'opzione. Crea una piccola app console con SharpDevelop. Inserisci questo codice in Programs.cs. Chiamo l'app "CWP"; Cambia sfondo. Prende solo un parametro dalla riga di comando: il nome del file. Testato su Windows 7 Ultimate a 64 bit con file .bmp.

    /*
     * 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] );
                }
            }
        }
    }

1

non è bello come passare del tempo a scrivere codice, ma esiste un util utilissimo sistema chiamato bginfo che incorpora informazioni sullo sfondo del desktop. è abbastanza configurabile con tutti i tipi di opzioni della riga di comando. no, non l'ho scritto.


0

Per Windows 7, funziona anche in aree riservate !! ;) Sostituisci il percorso di posizione dell'immagine 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

0

Il metodo di registro non funziona sempre, specialmente se l'immagine non è in formato bmp, quindi puoi provare il mio metodo. Basta aprire l'immagine desiderata utilizzando il visualizzatore di foto di Windows e utilizzare una scorciatoia da tastiera per impostare l'immagine come sfondo del desktop.

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"

Questo è uno script vbs ma puoi usare lo stesso metodo usando cmd


0

Indipendentemente da ciò che ho provato, non ho potuto cambiare in modo affidabile lo sfondo con regedit e UpdatePerUserSystemParameters (anche con loop di grandi dimensioni), quindi ho finito per usare PowerShell, funziona sempre.

Vedi 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

Seguendo, si potrebbe provare a chiamare la funzione in questo modo: "rundll32.exe user32.DLL, SystemParametersInfo 20 0 C: \ wallpaper.bmp 1" e ha funzionato allora ma non fa nulla ora. Immagino che Microsoft abbia corretto i bug di sicurezza e rundll esegua solo metodi specifici.
Joric
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.