如何通过脚本在Windows上设置桌面背景?


14

在X Windows上,我有一个很酷的'silent-alarm'提醒脚本,它将我的根窗口(背景)颜色更改为稳定的红色,仅需几秒钟,然后再将其更改回原来的颜色。 XP?

我正在考虑使用cscript设置注册表项(HKEY_CURRENT_USER\Control Panel\Desktop)的某种计划任务。但是,我的尝试似乎没有任何效果。我必须发出什么信号来读取这些注册表项并重新绘制桌面?

Answers:


8

这确实通过命令行更改了背景。只需将其另存为bat文件即可。使用bmp,否则您必须刷新。还设置要拉伸的墙纸。如果取出wallpaperstyle线,它将自动居中。

@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 \ Control Panel \ Colors \ Background”中更改背景颜色时,它不会执行此操作。
Peter Hahndorf

4

这是一个选择。使用SharpDevelop创建一个小型控制台应用程序。将此代码放入Programs.cs。我将应用程序称为“ CWP”;更换墙纸。它仅在命令行上使用一个参数:文件名。使用.bmp -file在Windows 7 Ultimate 64位上进行了测试。

    /*
     * 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”,它可以正常工作,但现在不执行任何操作。我猜微软已经修复了安全漏洞,而rundll只运行特定的方法。
Joric
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.