Как установить фон рабочего стола в Windows из скрипта?


14

В X Windows у меня был классный скрипт напоминания «беззвучный будильник», который менял цвет моего корневого окна (фона) на сплошной красный, всего за несколько секунд, прежде чем снова его менять. Есть ли способ сделать это для Windows XP?

Я думаю, что какая-то запланированная задача, которая использует cscript для установки ключей реестра ( HKEY_CURRENT_USER\Control Panel\Desktop). Однако мои попытки, похоже, не имеют никакого эффекта. Что мне нужно сделать, чтобы прочитать эти записи реестра и заново нарисовать рабочий стол?

Ответы:


8

Это меняет фон через командную строку. Просто сохраните это как файл летучей мыши. Используйте BMP или вам придется обновить. Также устанавливает обои, которые будут растягиваться. Если вы удалите линию обоев, она будет автоматически отцентрирована.

@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

Возможно, вам придется удалить HKCU\Control Panel\Desktop\TranscodedImageCacheперед обновлением.
Мишель де Рюйтер

Должны ли обои быть на локальном компьютере или на другом компьютере в сети, например \\ server \ share \ wallpaper.bmp?
Рикардо Бонер

6

Я думаю, что как только вы измените настройки обоев в реестре, вам просто нужно запустить

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

из командной строки, и изменения должны вступить в силу. Вы должны убедиться, что ваше изображение является файлом BMP.

На самом деле, я просто попробовал это, создав bmp-файл размером с рабочий стол, который был красным. Я изменил ключ // HKCU / панель управления / рабочий стол / обои, чтобы он содержал полный путь к этому растровому изображению. Я выполнил указанную выше команду из командной строки, и рабочий стол изменился на красный bmp, который я только что создал


У меня работает нормально, чтобы удалить изображение, но когда я пытался изменить цвет фона в «HKCU \ Панель управления \ Цвета \ Фон», он этого не делает.
Питер Хандорф

4

Вот один из вариантов. Создайте небольшое консольное приложение с SharpDevelop. Поместите этот код в Programs.cs. Я называю приложение "CWP"; Сменить обои. Требуется только один параметр в командной строке: имя файла. Протестировано на 64-битной Windows 7 Ultimate с файлом .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

это не так круто, как на самом деле тратить время на написание кода, но есть довольно полезная системная утилита bginfo, которая встраивает информацию в фон рабочего стола. это довольно настраиваемый со всеми видами параметров командной строки. нет, я не писал это


0

Для Windows 7 это работает даже в ограниченных областях !! ;) Замените путь к вашему изображению

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

Метод реестра работает не всегда, особенно если картинка не в формате BMP, поэтому вы можете попробовать мой метод. Просто откройте нужное изображение с помощью окна просмотра фотографий Windows и используйте сочетание клавиш, чтобы установить изображение в качестве обоев рабочего стола.

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"

Это скрипт vbs, но вы можете использовать тот же метод, используя cmd


0

Независимо от того, что я пытался, я не мог надежно менять обои с помощью regedit и UpdatePerUserSystemParameters (даже с большими циклами), поэтому я использовал PowerShell, он работает каждый раз.

См. 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

В последствии можно попробовать вызвать такую ​​функцию: «rundll32.exe user32.DLL, SystemParametersInfo 20 0 C: \ wallpaper.bmp 1», и тогда она работала, но сейчас ничего не делает. Я предполагаю, что Microsoft исправила ошибку безопасности, а rundll запускает только определенные методы.
Йорик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.