Answers:
这确实通过命令行更改了背景。只需将其另存为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
我认为,一旦您修改了注册表中的墙纸设置,您只需要运行
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
从命令行开始,更改将生效。您需要确保您的图像是bmp文件。
实际上,我只是通过创建一个桌面大小的全都是红色的bmp文件来尝试此操作。我更改了// HKCU /控制面板/桌面/墙纸键,以包含此位图的完整路径名。我从命令行运行了上面的命令,桌面变成了我刚创建的红色bmp
这是一个选择。使用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] );
}
}
}
}
这不像花时间写代码那样酷,但是有一个非常有用的系统实用程序bginfo,它将信息嵌入桌面背景中。它可以通过各种命令行选项进行配置。不,我没有写。
对于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
注册表方法并非始终有效,尤其是图片不是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使用相同的方法
无论我如何尝试,都无法使用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
HKCU\Control Panel\Desktop\TranscodedImageCache
才能更新。