autt 发表于 2011-9-14 16:31:33

随机更换桌面壁纸---修正实现版

本帖最后由 autt 于 2011-9-26 21:55 编辑

在老早的时候在网吧上网,桌面上就有这么一个工具,点击就能换桌面背景.一直很羡慕,现在算了了这个心愿了.
这个代码不完美之处(此处完美之说是根据我个人的需求)在于重启后桌面会变成兰底的而非关机前的桌面壁纸(菜的很,不知道什么原因),我以为是图片没有copy到目录下,结果用filecopy之后也一样.还有我这的电脑的coms电路坏了,每次开机都是2002年1月1日,但我想这应该不是引起重启后兰底桌面的原因,{:face (114):}

现对代码做出修正,感谢"大叔"(本论坛账号)对不能实现之处的指出

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         黄岩博创电脑- Autt

Script Function:
                   随机换壁纸                       
Date :
         2011-09-11
               
Description:       
                壁纸目录在C:/windows/wallpaper
                                只支持将jpg格式的转换成bmp格式.
                               
Ver   :0.1.0                               
               
#ce ----------------------------------------------------------------------------

#AutoIt3Wrapper_Res_Comment=系统 V0.2
#AutoIt3Wrapper_Res_Description=系统 V0.2
#AutoIt3Wrapper_Res_LegalCopyright= 黄岩博创电脑
#AutoIt3Wrapper_Res_Field=产品版本|V0.1.2
#AutoIt3Wrapper_Res_Field=产品名称|桌面随心换 V0.1.2
#AutoIt3Wrapper_Res_Field=源文件名|converter.ExE
#AutoIt3Wrapper_Res_Field=内部名称|点我.exe
#AutoIt3Wrapper_Res_Field=程序作者|JOHn
#AutoIt3Wrapper_Res_Field=日期 | 2011-09-09

#include <GDIPlus.au3>
#include <Array.au3>

Local $arry
Local $count=0
Local $dest="C:\WINDOWS\WallPaper\"

$search=FileFindFirstFile("C:\WINDOWS\WallPaper\"&"*.*")

while 1
        $file=FileFindNextFile($search)
          if @error then ExitLoop
                _ArrayAdd($arry,$file)   
        $count=$count+1
WEnd                              ;循环目录中的所有文件

$rnd=Random(1,$count,1)                ; 产生随机数

$wpaper=$arry[$rnd]      ;随机图片

_GDIPlus_Startup ()
;初始化gdi
$hImage = _GDIPlus_ImageLoadFromFile ($dest&$wpaper)
;选择文件,保存句柄到$hImage

$sCLSID = _GDIPlus_EncodersGetCLSID ("BMP")
;理解成要保存的格式??

$tData = DllStructCreate("int Data")
;创建一个类似C++的数据结构

DllStructSetData($tData, "Data", $GDIP_EVTTRANSFORMROTATE90)

$tParams = _GDIPlus_ParamInit (1)
_GDIPlus_ParamAdd ($tParams, $GDIP_EPGTRANSFORMATION, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data"))

;_GDIPlus_ImageSaveToFileEx ($hImage, "Wallpaper1.bmp", $sCLSID, DllStructGetPtr($tParams))原句,非完美
_GDIPlus_ImageSaveToFileEx ($hImage, "c:\Wallpaper1.bmp", $sCLSID, DllStructGetPtr($tParams))   ;实现之处,就是给图片加个路径
;保存文件,并命名为wallpaper1.bmp
_GDIPlus_ShutDown ()

dllcall("user32","int","SystemParametersInfo","int",20,"int",1,"str","c:\Wallpaper1.bmp","int",1) ;同样在这句中给图片加设路径,即重启后背景图片为上一次所设定的,功能实现~!!!!!

autt 发表于 2011-9-14 16:34:29

注释怎么没有变成绿色???

xjdjpbp 发表于 2011-9-14 20:32:02

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         黃岩博創電腦- Autt

Script Function:
                     隨機換壁紙                        
Date :
         2011-09-11
               
Description:      
                壁紙目錄在C:/windows/wallpaper
                              只支持將jpg格式的轉換成bmp格式.
                              
Ver   :0.1.0                              
               
#ce ----------------------------------------------------------------------------

#AutoIt3Wrapper_Res_Comment=系統 V0.2
#AutoIt3Wrapper_Res_Description=系統 V0.2
#AutoIt3Wrapper_Res_LegalCopyright= 黃岩博創電腦
#AutoIt3Wrapper_Res_Field=產品版本|V0.1.2
#AutoIt3Wrapper_Res_Field=產品名稱|桌面隨心換 V0.1.2
#AutoIt3Wrapper_Res_Field=源文件名|converter.ExE
#AutoIt3Wrapper_Res_Field=內部名稱|點我.exe
#AutoIt3Wrapper_Res_Field=程序作者|JOHn
#AutoIt3Wrapper_Res_Field=日期 | 2011-09-09

#include <GDIPlus.au3>
#include <Array.au3>

Local $arry
Local $count=0
Local $dest="C:\WINDOWS\WallPaper\"
;Global Const $SPI_SETDESKWALLPAPER = 0x0014
;Global Const $SPIF_UPDATEINIFILE = 0x01
;Global Const $SPIF_SENDCHANGE = 0x01

$search=FileFindFirstFile("C:\WINDOWS\WallPaper\"&"*.*")

while 1
      $file=FileFindNextFile($search)
          if @error then ExitLoop
                _ArrayAdd($arry,$file)   
      $count=$count+1
WEnd                              ;循環目錄中的所有文件

$rnd=Random(1,$count,1)                ; 產生隨機數

$wpaper=$arry[$rnd]      ;隨機圖片

_GDIPlus_Startup ()
;初始化gdi
$hImage = _GDIPlus_ImageLoadFromFile ($dest&$wpaper)
;選擇文件,保存句柄到$hImage

$sCLSID = _GDIPlus_EncodersGetCLSID ("BMP")
;理解成要保存的格式??

$tData = DllStructCreate("int Data")
;創建一個類似C++的數據結構

DllStructSetData($tData, "Data", $GDIP_EVTTRANSFORMROTATE90)

$tParams = _GDIPlus_ParamInit (1)
_GDIPlus_ParamAdd ($tParams, $GDIP_EPGTRANSFORMATION, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data"))

_GDIPlus_ImageSaveToFileEx ($hImage, "Wallpaper1.bmp", $sCLSID, DllStructGetPtr($tParams))
;保存文件,並命名為wallpaper1.bmp
_GDIPlus_ShutDown ()

;FileCopy("D:\Program Files\AutoIt3\work\Wallpaper1.bmp","C:\Documents and Settings\JOHn\Local Settings\Application Data\Microsoft\Wallpaper1.bmp",1)
dllcall("user32","int","SystemParametersInfo","int",20,"int",1,"str","Wallpaper1.bmp","int",1)
;dllcall("user32","int","SystemParametersInfo","int",$SPI_SETDESKWALLPAPER,"int",1,"str","Wallpaper1.bmp","int",BitOR($SPIF_UPDATEINIFILE,$SPIF_SENDCHANGE))

你用的是註解quote /quote,可以用au3/au3夾起來

autt 发表于 2011-9-15 09:29:36

可以用au3/au3夾起來thank you~`

piscesboy87 发表于 2011-9-18 16:06:48

顶。。。。。楼主

jsgh1983 发表于 2011-10-22 22:05:45

楼主很厉害,学习了。

酷儿 发表于 2015-10-6 14:34:04

不错 谢谢了
页: [1]
查看完整版本: 随机更换桌面壁纸---修正实现版