ฉันจะตั้งค่าพื้นหลังเดสก์ท็อปบน 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ก่อนอัปเดต
Michel de Ruiter

วอลล์เปเปอร์จะต้องอยู่ในเครื่องคอมพิวเตอร์หรือสามารถเป็นบนคอมพิวเตอร์เครื่องอื่นบนเครือข่ายเช่น \\ เซิร์ฟเวอร์ \ share \ wallpaper.bmp?
Ricardo Bohner

6

ฉันคิดว่าเมื่อคุณแก้ไขการตั้งค่ารูปพื้นหลังในรีจิสทรีคุณจะต้องเรียกใช้

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

จากบรรทัดคำสั่งและการเปลี่ยนแปลงควรมีผล คุณต้องแน่ใจว่าภาพของคุณเป็นไฟล์ bmp

อันที่จริงฉันเพิ่งลองทำโดยสร้างไฟล์ bmp ขนาดเดสก์ท็อปที่เป็นสีแดงทั้งหมด ฉันเปลี่ยนคีย์ // // HKCU / แผงควบคุม / เดสก์ท็อป / วอลเปเปอร์เพื่อให้มีชื่อพา ธ เต็มเป็นบิตแมปนี้ ฉันรันคำสั่งด้านบนจากบรรทัดคำสั่งและเดสก์ท็อปเปลี่ยนเป็น bmp สีแดงที่ฉันเพิ่งสร้างขึ้น


ทำงานได้ดีสำหรับฉันที่จะลบภาพ แต่เมื่อฉันพยายามที่จะเปลี่ยนสีพื้นหลังใน "HKCU \ Control Panel \ Colors \ Background" มันไม่ได้ทำ
ปีเตอร์ Hahndorf

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: \ Users \ 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 (แม้จะมีลูปขนาดใหญ่) ดังนั้นฉันจึงลงเอยด้วยการใช้ 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 จะใช้วิธีการเฉพาะเท่านั้น
Joric
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.