中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-31 23:36
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 实用批处理[之]更换桌面背景 查看 2,379 回复 7
楼 主 实用批处理[之]更换桌面背景 发表于 2008-07-12 17:32 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
趁今天有点空,发点实用的P

我知道这个有人发过,全部搜索了一遍,我的还是有不同点的。
我的能设置jpg图片为背景,前面也有人发过能设jpg图片的,不过要DLL文件支持,而我的不用。
其中好像涉及到系统自动将jpg转化为bmp格式的问题,希望有识之士能研究出来系统怎么个自动转换的原理。

"%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
此为当前桌面背景完整路径。

测试环境:XP SP2

::复制更换桌面背景.bat::
::将bmp格式图片拖入P中
@echo off
title 更换桌面背景
cd/d %~dp0
if /i %~x1==.BMP copy %1 "%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
echo 正在更换桌面背景
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
goto :eof
::复制更换桌面背景.bat::
::::::::::::::::::::::::

这个在论坛有人发过。

::一般更换墙纸.bat::
::图片为bmp格式
::拖入bmp格式图片即设置它为背景。
::直接双击运行,若当前目录中有bmp格式图片,则将名称排在最后的一张设为壁纸
@echo off
title 更换墙纸
setlocal enableDelayedExpansion
set pic=%1
if "!pic!"=="" call :search
if "!pic!"=="" set pic="%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
echo 正在添加注册表项目...
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d !pic! /f>nul
reg add "HKCU\Control Panel\Desktop" /v WallpaperStyle /d "2" /f>nul
echo 正在更换桌面背景
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
goto :eof
:search
 cd/d "%~dp0"
 for /f "delims=" %%a in ('dir/b *.bmp') do (
  set pic="%~dp0%%a"
 )
 goto :eof
::一般更换壁纸.bat::
::::::::::::::::::::
::强制更换壁纸.bat::
::有些系统不能成功
::图片为bmp或jpg格式
::如果图片格式为jpg,则桌面图标文字有背景色(成功设置后,运行一遍下面的还原壁纸可去除背景色)
::拖入图片运行
::双击直接运行,名字排后的一张设为背景
::同时可以禁止通过桌面属性来更改壁纸(用软件更改不能禁止)
@echo off
title 更换壁纸
setlocal enableDelayedExpansion
set pic=%1
if "!pic!"=="" call :search
if "!pic!"=="" set pic="%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
echo 正在添加注册表项目...
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d !pic! /f>nul
reg add "HKCU\Control Panel\Desktop" /v WallpaperStyle /d "2" /f>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Wallpaper /d !pic! /f>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v WallpaperStyle /d "2" /f>nul
echo 正在更换桌面背景
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
goto :eof
:search
 cd/d "%~dp0"
 for /f "delims=" %%a in ('dir/b *.jpg *.bmp') do (
  set pic="%~dp0%%a"
 )
 goto :eof
::强制更换壁纸.bat::
::::::::::::::::::::

::还原壁纸.bat::
::确保有"%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
@echo off
title 还原壁纸
set pic="%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
echo 正在添加注册表项目...
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d %pic% /f>nul
reg add "HKCU\Control Panel\Desktop" /v WallpaperStyle /d "2" /f>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Wallpaper /d %pic% /f>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v WallpaperStyle /d "2" /f>nul
echo 正在还原桌面背景
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
goto :eof
::还原壁纸.bat::
::::::::::::::::
说明文档
存放桌面背景的几个路径
-------------------------
C:\WINDOWS\Web\Wallpaper
::jpg桌面(还有Bliss.bmp)
C:\WINDOWS
::bmp桌面

::jpg、bmp、gif
-------------------------
其他两个位置
-------------------------
你指定的图片位置
::jpg、bmp、gif
"%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
::无特殊情况即为当前桌面背景
=========================


[ Last edited by wxcute on 2008-7-12 at 08:08 PM ]
┌───────┐
├→学习→实践→┤
└───────┘
2 发表于 2008-07-12 18:17 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
可怜,没人看,自己顶。
┌───────┐
├→学习→实践→┤
└───────┘
3 发表于 2008-07-12 19:01 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
::同时可以禁止通过桌面属性来更改壁纸

个人认为这样做很不好。

[ Last edited by HAT on 2008-7-12 at 07:03 PM ]
4 发表于 2008-07-12 19:10 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
不好意思,这个忘记发了。
::取消壁纸限制.bat::
@echo off
title 取消壁纸限制
echo 正在删除注册表项目...
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Wallpaper /f>nul
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v WallpaperStyle /f>nul
echo 正在刷新
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
goto :eof
::取消壁纸限制.bat::
::::::::::::::::::::
┌───────┐
├→学习→实践→┤
└───────┘
5 发表于 2008-07-12 19:11 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
顶~ ^_^
rundll32.exe果然很强大。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
6 发表于 2008-07-12 20:05 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
set pic=%1
if "%pic%"=="" set pic="%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d "%pic%" /f>nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Wallpaper /d "%pic%" /f>nul
set pic="%userProfile%\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d %pic% /f>nul
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Wallpaper /f>nul
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters


把你的两个批处理合并成一个不就行了吗
7 发表于 2008-07-12 20:11 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
回6楼
一次用不行,要等待系统把图片转换成功了才行,不然不起作用。

还有就是系统自动把jpg转化成bmp,这个有人研究出来了吗?我搞不清,是利用mspaint还是shimgvw.dll呢?
┌───────┐
├→学习→实践→┤
└───────┘
8 发表于 2008-07-12 22:38 ·  中国 上海 电信
高级用户
★★★
积分 916
发帖 377
注册 2004-03-08 00:00
22年会员
UID 19523
性别 男
状态 离线
曾经用过png写人注册表,但是实际开机的结果可能在加载png墙纸时出现半屏的黑屏现象。最后发现所有的不管什么格式最终都转换为bmp格式。所以也不费劲的所有的都用BMP
论坛跳转: