Board logo

标题: [其他] [已解决]随机换桌面墙纸! [打印本页]

作者: 生命接触    时间: 2008-10-13 13:20     标题: [已解决]随机换桌面墙纸!

  1. @echo off&setlocal enabledelayedexpansion
  2. title 随机更换桌面背景&color 1f
  3. :loop
  4. ::  获取当前目录下bmp文件的总数
  5. for %%a in (*.bmp) do set /a var+=1
  6. :: 提取一个随机数,范围在文件总数之内
  7. set /a w=%random%%%%var%+1
  8. :: 循环所有bmp文件,每次给num加1,当num的值等于随机数就以这个文件为桌面
  9. for %%a in (*.bmp) do (
  10.   set /a num+=1
  11.   if !num! equ !w! set wjm=%%a
  12. )
  13. )
  14. Rem ===================操作注册表=====================
  15. set regadd=reg add "HKEY_CURRENT_USER\Control Panel\Desktop"
  16. %regadd% /v TileWallpaper /d "0" /f>nul
  17. %regadd% /v Wallpaper /d "%wjm%" /f>nul
  18. %regadd% /v WallpaperStyle /d "2" /f>nul
  19. Rem ====================更新==========================
  20. RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
  21. ping 127.1 -n 5
  22. goto loop
复制代码



去掉开头的:loop 和结尾的ping后面,就是不循环执行.手动一下一下的点是可以成功!
加上循环以后就很难成功.执行十次大概就有一两次能成功换桌面!


[ 本帖最后由 生命接触 于 2008-10-13 14:44 编辑 ]
作者: pusofalse    时间: 2008-10-13 13:32

当然如此,var的值在不断累加,而BMP图片的数量却是固定的。
把:loop放到set /a w=%random%%%%var%+1下面。
作者: 生命接触    时间: 2008-10-13 13:42

也是不行..还是一样的情况.
作者: pusofalse    时间: 2008-10-13 14:00

- -|||看错了。。。
把:loop放在set /a w=%random%%%%var%+1的上面一行,并把set/a w=%random%%%%var%+1改为set/a w=%random%%%%var%+1,num=0
作者: 随风    时间: 2008-10-13 14:12

可以更简单点。
  1. @echo off&setlocal enabledelayedexpansion
  2. title 随机更换桌面背景&color 1f
  3. ::  获取当前目录下bmp文件的总数
  4. for %%a in (*.bmp) do set /a var+=1&set .!var!=%%a
  5. :: 提取一个随机数,范围在文件总数之内
  6. :loop
  7. set /a w=%random%%%var+1
  8. set wjm=!.%w%!
  9. Rem ===================操作注册表=====================
  10. set regadd=reg add "HKEY_CURRENT_USER\Control Panel\Desktop"
  11. %regadd% /v TileWallpaper /d "0" /f>nul
  12. %regadd% /v Wallpaper /d "%wjm%" /f>nul
  13. %regadd% /v WallpaperStyle /d "2" /f>nul
  14. Rem ====================更新==========================
  15. RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
  16. ping 127.1 -n 5
  17. goto loop
复制代码

作者: 生命接触    时间: 2008-10-13 14:17

原帖由 pusofalse 于 2008-10-13 14:00 发表
- -|||看错了。。。
把:loop放在set /a w=%random%%%%var%+1的上面一行,并把set/a w=%random%%%%var%+1改为set/a w=%random%%%%var%+1,num=0





你的方法还是不行.不过非常感谢!!
作者: 生命接触    时间: 2008-10-13 14:18

随风版主的可以用.他改动过一点.不过有点看不明白为什么要那样改...

非常感谢!
作者: 生命接触    时间: 2008-10-13 14:27

@echo off&setlocal enabledelayedexpansion
title 随机更换桌面背景&color 1f

::  获取当前目录下bmp文件的总数
for %%a in (*.bmp) do set /a var+=1
:: 提取一个随机数,范围在文件总数之内
set /a w=%random%%%%var%+1
:: 循环所有bmp文件,每次给num加1,当num的值等于随机数就以这个文件为桌面
for %%a in (*.bmp) do (
  set /a num+=1
  if !num! equ !w! set wjm=%%a
)
)
Rem ===================操作注册表=====================
set regadd=reg add "HKEY_CURRENT_USER\Control Panel\Desktop"
%regadd% /v TileWallpaper /d "0" /f>nul
%regadd% /v Wallpaper /d "%wjm%" /f>nul
%regadd% /v WallpaperStyle /d "2" /f>nul
Rem ====================更新==========================
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters

ping 127.1 -n 5
start "bat本身绝对路径"
exit

这样好像也可以!但好像也失去意义了.呵呵....
作者: 生命接触    时间: 2008-10-13 14:43

我发的那段代码随机性不够强,很多时候会出现重复墙纸.

随风版主的更好..用VBS在开机的时候加载.我想效果会比较好看!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2