![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 20:21 |
共 48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [原创]随机选取图片作为桌面背景的实现 |
| 可打印版本 792 / 2 |
| 第1楼 cngd1 | 发表于 2007-09-14 00:53 |
| 新手上路 发帖 5 积分 16 | |
|
[原创]随机选取图片作为桌面背景的实现 因为自己希望定期从指定目录及其子目录下的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 希望能帮到有需要的朋友! |
|
| 第2楼 HAT | 发表于 2007-09-16 13:05 |
| 版主 发帖 5,017 积分 9,023 | |
|
思路看上去很面熟:)
|
|
| 第3楼 cngd1 | 发表于 2007-09-20 13:28 |
| 新手上路 发帖 5 积分 16 | |
|
思路当然面熟啦!我都说了参考了论坛前辈的有关随机获取文件名的精华,再加进行图象转换的VBS脚本,拼出来的。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |