Як встановити фон робочого столу в Windows із сценарію?


14

У X Windows у мене був класний сценарій нагадування "беззвучна тривога", який змінив би колір мого кореневого вікна (фон) на суцільно червоний, за кілька секунд, перш ніж змінити його назад. Чи є спосіб це зробити для Windows XP?

Я думаю про якесь заплановане завдання, яке використовує cscript для встановлення ключів реєстру ( HKEY_CURRENT_USER\Control Panel\Desktop). Однак мої спроби, здається, не дають ніякого ефекту. Що мені потрібно подати, щоб прочитати ці записи в реєстрі та знову намалювати робочий стіл?

Відповіді:


8

Це змінює фон за допомогою командного рядка. Просто збережіть це як файл bat. Використовуйте 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перед оновленням.
Мішель де Руйтер

Чи має шпалери бути на локальному комп’ютері чи це може бути на іншому комп’ютері в мережі, наприклад \\ сервер \ share \ wallpaper.bmp?
Рікардо Бонер

6

Я думаю, що раз змінивши налаштування шпалер в реєстрі, вам просто потрібно запустити

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

з командного рядка і зміни повинні набути чинності. Вам потрібно переконатися, що ваше зображення - це bmp-файл.

Насправді я просто спробував це, створивши bmp-файл настільного розміру, який був увесь червоний. Я змінив // HKCU / панель управління / клавіатуру робочого столу / шпалери, щоб містити повну назву шляху до цієї растрової карти. Я запустив вищезгадану команду з командного рядка, і робочий стіл змінився на червоний bmp, який я щойно створив


Для мене добре працює, щоб видалити зображення, але коли я намагався змінити колір тла на "HKCU \ Панель управління \ Кольори \ Фон", це не робить.
Пітер Гандорф

4

Ось один варіант. Створіть невеликий додаток консолі за допомогою програми SharpDevelop. Помістіть цей код у Programs.cs. Я називаю додаток "CWP"; Змінити шпалери. У командному рядку потрібен лише один параметр: ім'я файлу. Тестується на Windows 7 Ultimate 64-розрядному файлі .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] );
                }
            }
        }
    }

1

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


0

Для Windows 7 він працює навіть у обмежених областях !! ;) Замініть шлях розташування вашого зображення на

C: \ Користувачі \ 1509967 \ Настільний \ 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 (навіть з великими петлями), тому я в кінцевому підсумку використовував powerhell, він працює щоразу.

Дивіться 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.