Jak ustawić tło pulpitu w systemie Windows ze skryptu?

14

W X Windows miałem fajny skrypt przypominający „cichy alarm”, który zmieniłby kolor okna głównego (tła) na stały czerwony, tylko na kilka sekund na kilka sekund przed powrotem do niego. Czy istnieje sposób, aby to zrobić w systemie Windows XP?

Myślę o pewnym zaplanowanym zadaniu, które używa cscript do ustawiania kluczy rejestru ( HKEY_CURRENT_USER\Control Panel\Desktop). Jednak moje próby nie wydają się przynosić żadnego efektu. Co muszę zasygnalizować, aby odczytać te wpisy rejestru i ponownie narysować pulpit?

gronostaj
źródło

Odpowiedzi:

8

To zmienia tło za pomocą wiersza poleceń. Po prostu zapisz to jako plik nietoperza. Użyj bmp lub będziesz musiał odświeżyć. Ustawia także tapetę do rozciągnięcia. Jeśli wyjmiesz linię tapety, zostanie ona automatycznie wyśrodkowana.

@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
źródło
Być może będziesz musiał usunąć HKCU\Control Panel\Desktop\TranscodedImageCacheprzed aktualizacją.
Michel de Ruiter,
Czy tapeta musi znajdować się na komputerze lokalnym, czy może na innym komputerze w sieci, takim jak \\ server \ share \ wallpaper.bmp?
Ricardo Bohner
6

Myślę, że po zmodyfikowaniu ustawienia tapety w rejestrze wystarczy uruchomić

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

z wiersza poleceń, a zmiany powinny wejść w życie. Musisz upewnić się, że obraz jest plikiem bmp.

W rzeczywistości właśnie tego próbowałem, tworząc plik bmp o rozmiarze pulpitu, który był cały czerwony. Zmieniłem // HKCU / panel sterowania / pulpit / tapetę, aby zawierała pełną ścieżkę do tej mapy bitowej. Uruchomiłem powyższe polecenie z wiersza poleceń, a pulpit zmienił się na czerwony właśnie utworzony plik bmp

znak
źródło
działa dobrze dla mnie, aby usunąć obraz, ale kiedy próbowałem zmienić kolor tła w „HKCU \ Panel sterowania \ Kolory \ Tło”, nie robi tego.
Peter Hahndorf
4

Oto jedna z opcji. Utwórz małą aplikację konsolową za pomocą SharpDevelop. Umieść ten kod w Programs.cs. Nazywam aplikację „CWP”; Zmień tapetę. W wierszu poleceń bierze tylko jeden parametr: nazwę pliku. Testowany w systemie Windows 7 Ultimate w wersji 64-bitowej z plikiem .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] );
                }
            }
        }
    }
Błyskawica
źródło
1

nie jest to tak fajne, jak spędzanie czasu na pisaniu kodu, ale istnieje całkiem użyteczne narzędzie systemowe o nazwie bginfo, które osadza informacje w tle pulpitu. jest dość konfigurowalny z wszystkimi opcjami wiersza poleceń. nie, nie napisałem tego.


źródło
0

W systemie Windows 7 działa nawet w ograniczonych obszarach !! ;) Zamień ścieżkę lokalizacji obrazu na

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
źródło
0

Metoda rejestru nie działa cały czas, szczególnie jeśli obraz nie jest w formacie bmp, więc możesz wypróbować moją metodę. Wystarczy otworzyć zdjęcie za pomocą przeglądarki zdjęć systemu Windows i użyć skrótu klawiaturowego, aby ustawić zdjęcie jako tapetę pulpitu.

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"

To jest skrypt VBS, ale możesz użyć tej samej metody, używając cmd

Taha Eltahawy
źródło
0

Bez względu na to, co próbowałem, nie mogłem niezawodnie zmienić tapety za pomocą regedit i UpdatePerUserSystemParameters (nawet z dużymi pętlami), więc skończyło się na PowerShell, działa za każdym razem.

Zobacz 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
źródło
Następnie można wywołać funkcję w ten sposób: „rundll32.exe user32.DLL, SystemParametersInfo 20 0 C: \ wallpaper.bmp 1” i wtedy to działało, ale teraz nic nie robi. Myślę, że Microsoft naprawił błąd bezpieczeństwa, a rundll uruchamia tylko określone metody.
Joric