中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]随机选取图片作为桌面背景的实现
作者:
标题: [原创]随机选取图片作为桌面背景的实现 上一主题 | 下一主题
cngd1
新手上路





积分 16
发帖 5
注册 2007-9-10
状态 离线
『楼 主』:  [原创]随机选取图片作为桌面背景的实现

因为自己希望定期从指定目录及其子目录下的JPG文件随机选取一张作为桌面的背景图,而且希望使用居中不拉伸的样式显示,经过多次尝试发现微软提供的BGSWITCH插件未能满足我的要求(每次都会将图片拉伸到满屏),参考论坛上前辈的范例后自己动手写了一个CMD的批处理和一个VBS的脚本,其中VBS的脚本主要是调用WIA的控件将JPG文件转换成BMP文件。

1、setmybg.cmd
@echo off
rem 使用变量延迟扩展的语句
rem setlocal EnableDelayedExpansion

copy nul %~dp0list.txt > nul
for /f "usebackq delims=" %%i in (`dir/a-d/b/s %1`) do call set $%%random%%$%%i=$
for /f "tokens=1,2* delims=$=" %%i in ('set $') do echo %%i/%%j >> %~dp0list.txt
for /f "tokens=1,* delims==" %%i in ('set $') do call set %%i=

set /a n=1

rem 使用变量延迟扩展的语句
rem for /f "tokens=1,2* delims=/" %%i in ('sort /R %~dp0list.txt') do if !n! equ 1 ( set bgfile=%%j && set /a n=!n!+1 ) else ( goto end )
for /f "tokens=1,2* delims=/" %%i in ('sort /R %~dp0list.txt') do if %n% equ 1 ( set bgfile=%%j && goto STARTCONVERT )
goto :end

:STARTCONVERT
if not exist %~dp0wallpaper1.bmp goto SETBG
del /f /q %~dp0wallpaper1.bmp

:SETBG
cscript %~dp0convert-bmp.vbs %bgfile% "%~dp0wallpaper1.bmp" > nul
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d "%~dp0Wallpaper1.bmp" /f > nul
reg add "HKCU\Control Panel\Desktop" /v WallpaperStyle /d "0" /f > nul
reg add "HKCU\Control Panel\Desktop" /v TileWallpaper /d "0" /f > nul
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters > nul

:end
del /f /q %~dp0list.txt

rem 使用变量延迟扩展的语句
rem endlocal

2、convert-bmp.vbs
Dim oImg '图片文件
Dim oIP '图片处理

Set objArgs = WScript.Arguments
sOrgImg = objArgs(0)
sDesImg = objArgs(1)

Set oImg = CreateObject("WIA.ImageFile")
Set oIP = CreateObject("WIA.ImageProcess")

oImg.LoadFile sOrgImg '载入原始图片

oIP.Filters.Add oIP.FilterInfos("Convert").FilterID
oIP.Filters(1).Properties("FormatID").Value = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"  '这里的格式可以自行设定,见附表
'oIP.Filters(1).Properties("Quality").Value = 5 '图片质量

Set oNewImg = oIP.Apply(oImg) '应用

oNewImg.SaveFile sDesImg '保存转换后的图片

使用的时候将两个文件保存在同一个目录,运行setmybg.cmd并提供保存JPG文件的目录作为参数,例如:
setmybg.cmd d:\photo
如果希望选择特定文件名格式的,可以这样:
setmybg.cmd d:\photo\*0709*JPG

希望能帮到有需要的朋友!

2007-9-14 00:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

思路看上去很面熟:)

2007-9-16 13:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
cngd1
新手上路





积分 16
发帖 5
注册 2007-9-10
状态 离线
『第 3 楼』:  

思路当然面熟啦!我都说了参考了论坛前辈的有关随机获取文件名的精华,再加进行图象转换的VBS脚本,拼出来的。

2007-9-20 13:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: