smstroble Posted December 26, 2006 Posted December 26, 2006 (edited) I know there are a lot of them out there but i like mine better Features: Full GUIPVW32Con.exe is used for converting many many image formats to BMP ( if you dont trust the one i packaged have a look at http://www.pictview.com/pvw.htm my prog uses the command line version)Auto switch between a select list of wallpapersRemembers all listsMinimizes to TrayUmm some other stuff i forgot, havent worked on this project in a while, dident think i was going to release it.expandcollapse popup _linenums:0'>#cs ------------------------------------------- ||||||||||||||||||||||||||||||||||||||||||| ------------------------------------------- Version Info -------------- Complete Wallpaper Switcher V3.2 Changes: I dont remember anymore... ------------------------------------------- ||||||||||||||||||||||||||||||||||||||||||| ------------------------------------------- #ce #include <Constants.au3> #include <GUIConstants.au3> #include <Array.au3> #include <guilist.au3> #include <File.au3> AutoItSetOption("TrayAutoPause", 0) AutoItSetOption("TrayMenuMode", 1) AutoItSetOption("trayiconhide", 1) ; init variables Dim $paperArray[1] Dim $names[1] Dim $tobedel[1] Dim $autopaperarray[1] Dim $pipesplit[1] Dim $filedesktop[10] $filedesktop[0] = 0 $d = 0 $previewpaper = "" $oldlist = 0 $mainlistsel = 0 $c = 1 $new = 0 $main = 0 $num = 0 $chklist = -2 $b = 0 $i = 0 $list = "" $timeractivate = 0 $gobuttonstatus = 0 $paperlist = 0 $listl = 0 $radio3 = 0 $timeinput = 0 $start = 0 $timetillswitch = 0 $preview = 0 $minipreview = 0 $fileexit = 0 $delete = 0 $Buttonadd = 0 $list1 = 0 $list2 = 0 $Buttonremove = 0 $setpaper = 0 $radio1 = 0 $radio2 = 0 $gobutton = 0 $fileopen = 0 $paperlist = 0 $selectdir = @MyDocumentsDir startpaperprog() ;end init func startpaperprog() $previewpaper = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop", "Wallpaper") ;set Preview paper to current wallpaper ;GUI Global $main = GUICreate("Wallpaper Switcher", 665, 471, 190, 219) Global $filemenu = GUICtrlCreateMenu("File") Global $fileopen = GUICtrlCreateMenuitem("Open", $filemenu) $filedesktop[0] = GUICtrlCreateMenu("Desktop", $filemenu) Global $fileexit = GUICtrlCreateMenuitem("Exit", $filemenu) Global $helpmenu = GUICtrlCreateMenu("Help") Global $helphelp = GUICtrlCreateMenuitem("Help", $helpmenu) GUICtrlSetState(-1,$GUI_DISABLE) Global $helpabout = GUICtrlCreateMenuitem("About", $helpmenu) GUICtrlSetState(-1,$GUI_DISABLE) Global $timetillswitch = GUICtrlCreateProgress(0, 434, 665, 17) GUICtrlSetColor(-1, 0xB2B4BF) Global $Preview = GUICtrlCreatePic($previewpaper, 328, 31, 320, 256, BitOR($WS_GROUP,$WS_THICKFRAME));,$SS_CENTERIMAGE)) Global $paperlist = GUICtrlCreateList("", 24, 31, 209, 292) GUICtrlCreateLabel("Wallpapers", 24, 15, 57, 17) Global $new = GUICtrlCreateButton("New", 240, 39, 75, 25, 0) Global $delete = GUICtrlCreateButton("Delete", 240, 71, 75, 25, 0) Global $setpaper = GUICtrlCreateButton("Set", 240, 103, 75, 25, 0) Global $Radio1 = GUICtrlCreateRadio("Tile", 336, 293, 41, 17) Global $Radio2 = GUICtrlCreateRadio("Center", 392, 293, 57, 17) Global $Radio3 = GUICtrlCreateRadio("Fit Screen", 464, 293, 73, 17) Global $minipreview = GUICtrlCreatePic($previewpaper, 24, 303, 160, 128, $WS_GROUP) Global $Buttonadd = GUICtrlCreateButton(">", 348, 346, 31, 25, 0) Global $Buttonremove = GUICtrlCreateButton("<", 348, 381, 31, 25, 0) Global $List1 = GUICtrlCreateList("", 199, 332, 137, 97) GUICtrlCreateLabel("Wallpapers", 199, 316, 57, 17) Global $List2 = GUICtrlCreateList("", 391, 332, 137, 97) GUICtrlCreateLabel("Selected wallpapers", 391, 316, 99, 17) GUICtrlCreateLabel("Change Wallpaper Every", 531, 350, 121, 21) Global $timeinput = GUICtrlCreateInput(1, 548, 370, 30, 21, $ES_NUMBER) GUICtrlCreateLabel("Minutes", 580, 373, 40, 41) Global $gobutton = GUICtrlCreateButton("start", 623, 370, 30, 21) ; End GUI $filelines = _FileCountLines(@scriptdir & "\filelist.ini") do ;load wallpapers from filelist.ini $i = $i + 1 $fileline = FileReadLine(@scriptdir & "\filelist.ini", $i) If $fileline = "[Auto Paper]" Then Do $i = $i + 1 $fileline = FileReadLine(@scriptdir & "\filelist.ini", $i) If $fileline <> "" Then If @error Then MsgBox(0, "Error", "Unable to load Ppevious wallpapers") EndIf $split = StringSplit($fileline, "\") _ArrayAdd ($autopaperarray, $split[$split[0]]) $autopaperarray[0] = $autopaperarray[0] + 1 GUICtrlSetData($List2, $split[$split[0]]) $index = _GUICtrlListFindString($list1, $split[$split[0]]) _GUICtrlListDeleteItem($list1, $index) $c = $c + 1 EndIf Until $filelines <= $i Else If $fileline <> "" Then _ArrayAdd($paperArray, $fileline) If @error Then MsgBox(0, "Error", "Unable to load Ppevious wallpapers") EndIf $split = StringSplit($paperArray[$c], "\") _ArrayAdd ($names, $split[$split[0]]) GUICtrlSetData($paperlist, $split[$split[0]]) GUICtrlSetData($List1, $split[$split[0]]) $c = $c + 1 EndIf EndIf until $filelines <= $i If _GUICtrlListCount($list1) = 0 Then GUICtrlSetState($Buttonadd, $GUI_DISABLE) ElseIf _GUICtrlListCount($list2) = 0 Then GUICtrlSetState($Buttonremove, $GUI_DISABLE) EndIf eventhandler() EndFunc Func eventhandler() AutoItSetOption("trayiconhide", 1) HotKeySet("^!{f3}") GUISetState(@SW_SHOW) $oldlist = GUICtrlRead($paperlist) $minioldlist = GUICtrlRead($list1) GUICtrlSetState($radio3, $GUI_CHECKED) While 1 ;GUI related functions if $timeractivate Then $delay = GUICtrlRead($timeinput) $delay = $delay * 60000 $current = TimerDiff($start) if $current >= $delay Then $newpaper = Random(1, $autopaperarray[0], 1) $b = _ArraySearch($names, $autopaperarray[$newpaper]) applyimage($paperArray[$b], 2, 0) $start = TimerInit() EndIf $percent = $current / $delay $percent = $percent * 100 GUICtrlSetData($timetillswitch, $percent) Endif $mainlistsel = GUICtrlRead($paperlist) if $mainlistsel <> $oldlist Then ;update priewview paper $b = _ArraySearch($names, $mainlistsel) GUICtrlSetImage($preview, $paperArray[$b]) $oldlist = $mainlistsel EndIf $autolistsel = GUICtrlRead($list1) if $autolistsel <> $minioldlist Then ;update priewview paper for list1 $b = _ArraySearch($names, $autolistsel) GUICtrlSetImage($minipreview, $paperArray[$b]) $minioldlist = $autolistsel EndIf $msg = GuiGetMsg() ; get GUI event Select ;event handler Case $msg = $GUI_EVENT_MINIMIZE GUISetState(@SW_HIDE) AutoItSetOption("trayiconhide", 0) If $timeractivate = 1 Then timeronly($delay) Else HotKeySet("^!{f3}", "eventhandler") While 1 $traymsg = TrayGetMsg() Select Case $traymsg = $TRAY_EVENT_PRIMARYDOUBLE eventhandler() EndSelect WEnd EndIf Case $msg = $GUI_EVENT_CLOSE;GUI close if $timeractivate = 1 Then GUISetState(@SW_HIDE) timeronly($delay) Else _FileWriteFromArray(@scriptdir & "\filelist.ini", $paperArray, 1) $inifile = FileOpen(@scriptdir & "\filelist.ini", 1) FileWrite($inifile,@CRLF & "[Auto Paper]" & @CRLF) $x = 1 While $autopaperarray[0] >= $x $b = _ArraySearch($names, $autopaperarray[$x]) FileWrite($inifile, $paperArray[$b] & @CRLF) $x = $x + 1 WEnd FileClose($inifile) Exit EndIf Case $msg = $fileexit _FileWriteFromArray(@scriptdir & "\filelist.ini", $paperArray, 1) $inifile = FileOpen(@scriptdir & "\filelist.ini", 1) FileWrite($inifile,@CRLF & "[Auto Paper]" & @CRLF) $x = 1 While $autopaperarray[0] >= $x $b = _ArraySearch($names, $autopaperarray[$x]) FileWrite($inifile, $paperArray[$b] & @CRLF) $x = $x + 1 WEnd FileClose($inifile) Exit Case $msg = $new ;new button pressed paperselect() Case $msg = $delete ;delete button pressed If $mainlistsel <> "" Then $b = _ArraySearch($names, $mainlistsel) _ArrayDelete($paperArray, $ B) ;remove deleted entry from paperarray, removes it from ini output _ArrayDelete($names, $ B) ;remove delted entry from names, allows paperpreview to operate normally $selected = _GUICtrlListSelectedIndex($paperlist) _GUICtrlListDeleteItem($paperlist, $selected) _GUICtrlListSelectIndex($paperlist, $selected) $dellist1index = _GUICtrlListSelectString($list1, $mainlistsel) if $dellist1index <> $LB_ERR Then ;check if deleted item was in list _GUICtrlListDeleteItem($list1, $dellist1index) $countlist1 = _GUICtrlListCount($list1) if $countlist1 = 0 Then ;check if deleted item was last in list, if true then disable add(>) button GUICtrlSetState($Buttonadd, $GUI_DISABLE) EndIf EndIf $dellist2index = _GUICtrlListSelectString($list2, $mainlistsel) $b = 0 $nothere = 0 While $mainlistsel <> $autopaperarray[$b] ;deturmine index number of removed string in paperarray and names $b = $b + 1 if $b > $autopaperarray[0] Then $nothere = 1 ExitLoop EndIf WEnd if $nothere = 0 Then _ArrayDelete($autopaperarray, $ B) $autopaperarray[0] = $autopaperarray[0] - 1 EndIf if $dellist2index <> $LB_ERR Then ;check if deleted item was in list _GUICtrlListDeleteItem($list2, $dellist2index) $countlist2 = _GUICtrlListCount($list2) if $countlist2 = 0 Then ;check if deleted item was last in list, if true then disable remove(<) button GUICtrlSetState($Buttonremove, $GUI_DISABLE) EndIf EndIf EndIf Case $msg = $setpaper ;set button pressed $b = _ArraySearch($names, $mainlistsel) If GUICtrlread($radio1) = $GUI_CHECKED Then ;wallpaper option tile $s_style = 1 $s_tile = 1 applyimage($paperArray[$b],$s_style,$s_tile) ElseIf GUICtrlread($radio2) = $GUI_CHECKED Then ;wallpaper option center $s_style = 1 $s_tile = 0 applyimage($paperArray[$b],$s_style,$s_tile) ElseIf GUICtrlread($radio3) = $GUI_CHECKED Then ;wallpaper option Stretch $s_style = 2 $s_tile = 0 applyimage($paperArray[$b],$s_style,$s_tile) Else MsgBox(0, "Error", "Please Select Display Style") EndIf Case $msg = $Buttonadd ; add(>) button pressed if GUICtrlRead($list1) Then ;if 0 endif $list1slected = GUICtrlRead($list1) $list1selindex = _GUICtrlListSelectedIndex($list1) If $list1selindex = 0 Then $previewpaper = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop", "Wallpaper") GUICtrlSetImage($preview, $previewpaper) EndIf GUICtrlSetData($List2, $list1slected) _ArrayAdd($autopaperarray, $list1slected) $autopaperarray[0] = $autopaperarray[0] + 1 _GUICtrlListDeleteItem($list1, $list1selindex) GUICtrlSetState($Buttonremove, $GUI_ENABLE) $countlist1 = _GUICtrlListCount($list1) if $countlist1 = 0 Then ;last entry in list? GUICtrlSetState($Buttonadd, $GUI_DISABLE) ;yes diable add(>) button Else GUICtrlSetState($Buttonadd, $GUI_ENABLE) ;no enable add(>) button if not allready enabled EndIf _GUICtrlListSelectIndex($list1, $list1selindex) EndIf Case $msg = $Buttonremove ; remove(<) button pressed if GUICtrlRead($list2) Then ;if 0 returned endif $list2slected = GUICtrlRead($list2) $list2selindex = _GUICtrlListSelectedIndex($list2) GUICtrlSetData($List1, $list2slected) $autodelindex = _ArraySearch($autopaperarray, $list2slected) _ArrayDelete($autopaperarray, $autodelindex) $autopaperarray[0] = $autopaperarray[0] - 1 _GUICtrlListDeleteItem($list2, $list2selindex) $countlist2 = _GUICtrlListCount($list2) if $countlist2 = 0 Then ;last entry in list? GUICtrlSetState($Buttonremove, $GUI_DISABLE) ;yes diable remove(<) button Else GUICtrlSetState($Buttonadd, $GUI_ENABLE) ;no enable remove(<) button if not allready enabled EndIf _GUICtrlListSelectIndex($list2, $list2selindex) EndIf Case $msg = $gobutton ;Go button pressed $time = GUICtrlRead($timeinput) If $gobuttonstatus = 0 Then if $time <> "" Then $listcount = _GUICtrlListCount($list2) if $listcount <> 0 Then $timeractivate = 1 Global $start = TimerInit() GUICtrlSetData($gobutton, "stop") $gobuttonstatus = 1 EndIf EndIf Else $timeractivate = 0 $gobuttonstatus = 0 GUICtrlSetData($gobutton, "start") EndIf Case $msg = $fileopen paperselect() EndSelect WEnd Exit EndFunc Func timeronly($delay) AutoItSetOption("trayiconhide", 0) HotKeySet("^!{f3}", "eventhandler") While 1 $traymsg = TrayGetMsg() Select Case $traymsg = $TRAY_EVENT_PRIMARYDOUBLE eventhandler() EndSelect $delay = GUICtrlRead($timeinput) $delay = $delay * 60000 $current = TimerDiff($start) if $current >= $delay Then $newpaper = Random(1, $autopaperarray[0], 1) $b = _ArraySearch($names, $autopaperarray[$newpaper]) applyimage($paperArray[$b], 2, 0) $start = TimerInit() EndIf $percent = $current / $delay $percent = $percent * 100 GUICtrlSetData($timetillswitch, $percent) WEnd EndFunc Func paperselect() ;select new wallpaer and add to wallpapaer list in GUI $fileopened = FileOpenDialog("Select Wallpaper", $selectdir, "Images (*.jpg;*.jpeg;*.bmp;*.png;*.pic;*.img;*.gif)", 5) If @error Then Return(0) EndIf $selectdir = @WorkingDir $pipesplit = StringSplit($fileopened, "|") if $pipesplit[0] = 1 Then ;MsgBox(0, "chk", "position1") _ArrayAdd($paperArray, $pipesplit[1]) $split = StringSplit($fileopened, "\") _ArrayAdd($names, $split[$split[0]]) GUICtrlSetData($paperlist, $split[$split[0]]) GUICtrlSetData($List1, $split[$split[0]]) Else $runs = 2 ;MsgBox(0, "chk", "position2") While $pipesplit[0] <> $runs ;MsgBox(0, "chk", "position3") _ArrayAdd($paperArray, $pipesplit[1] & "\" &$pipesplit[$runs]) _ArrayAdd($names, $pipesplit[$runs]) GUICtrlSetData($paperlist, $pipesplit[$runs]) GUICtrlSetData($List1, $pipesplit[$runs]) $runs = $runs + 1 WEnd EndIf GUICtrlSetState($Buttonadd, $GUI_ENABLE) $c = 1 + $c _FileWriteFromArray(@scriptdir & "\filelist.ini", $paperArray, 1) Return(0) EndFunc Func applyimage($s_path, $s_style, $s_tile) ;Apply wallpaper to windows desktop ;read last 4 characters of file name $apply_type = StringRight($s_path, 4) ;if not .bmp use pvw32con to convert to .bmp and copy to windowsdir\xwall.bmp If $apply_type = ".jpg" Or _ $apply_type = "jpeg" Or _ $apply_type = ".gif" Or _ $apply_type = ".png" Or _ $apply_type = ".pic" Or _ $apply_type = ".png" Then FileDelete(@ScriptDir & "\xwall.bmp") RunWait(@ScriptDir & "\pvw32con.exe " & '"' & $s_path & '"' & " -w --oo " & '"' & @ScriptDir & "\xwall.bmp" & '"', _ @ScriptDir, @SW_HIDE) Else ;if .bmp copy to windowsdir\xwall.bmp FileCopy($s_path, @scriptdir & "\xwall.bmp", 1) EndIf ;change wallpaper settings in registry RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", $s_style) RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", $s_tile) Sleep(250) ;apply now wallpaper and refresh windows wallpaper DllCall("User32.dll", "int", "SystemParametersInfo", "int", 20, "int", 0, "string", @ScriptDir & "\xwall.bmp", "int", 0x01) Return(0) EndFuncLet me know what ya think, and what i inevetably messed up...Cedit to xcal for making the function that converts the image via picview and updates the desktop. Original PostEdit: Minor fix's, fixed all the AU3Check warnings, removed the desktop menu that dosent do anything.Edit2: Allmost forgot the icon I use for it :-) Edited December 26, 2006 by smstroble MUHAHAHAHAHA
smstroble Posted December 26, 2006 Author Posted December 26, 2006 24 views no downloads no replys, shakes head. Well here is a picture of what it looks like. I put a lot of work into the GUI. MUHAHAHAHAHA
Thatsgreat2345 Posted December 26, 2006 Posted December 26, 2006 Looks nice lol to bad I love my wall paper .
Michel Claveau Posted December 26, 2006 Posted December 26, 2006 Hi!24 views no downloads no replys, shakes head.The concept is interesting ; but, perso, I use .html wallpaper (who display, natively, .jpg ; auto-change images ; call AutoIt-X)
jftuga Posted December 27, 2006 Posted December 27, 2006 I've been looking for a script to do this, but don't have the time to try it until next week. I also need to transfer my Christmas pics from my camera. -John Admin_Popup, show computer info or launch shellRemote Manager, facilitates connecting to RDP / VNCProc_Watch, reprioritize cpu intensive processesUDF: _ini_to_dict, transforms ini file entries into variablesUDF: monitor_resolutions, returns resolutions of multiple monitorsReport Computer Problem, for your IT help deskProfile Fixer, fixes a 'missing' AD user profile
Kohr Posted December 28, 2006 Posted December 28, 2006 (edited) This looks very good. Here are a few problems and 1 request. I found this error (still runs fine though). CODE>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Documents and Settings\me\Desktop\Wallpaper Switch.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams +> Starting AutoIt3Wrapper v.1.7.4 >Running AU3Check (1.54.6.0) params: from:C:\Program Files\AutoIt3 C:\Documents and Settings\me\Desktop\Wallpaper Switch.au3(164,35) : WARNING: $list1: possibly used before declaration. $minioldlist = GUICtrlRead($list1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\me\Desktop\Wallpaper Switch.au3(104,58) : WARNING: $list1: declared global in function only. Prefer top of file. Global $List1 = GUICtrlCreateList("", 199, 332, 137, 97) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\me\Desktop\Wallpaper Switch.au3 - 0 error(s), 2 warning(s) ->AU3Check ended.rc:1 >Running:(3.2.2.0):C:\Program Files\AutoIt3\autoit3.exe "C:\Documents and Settings\me\Desktop\Wallpaper Switch.au3" I am running WinXP so the progress bar is pushing the small picture in lower left up into the area of the ListView. I run dual moniters @ both home and work so this would be very nice if it could support that. I currently use UltraMon to handle dual screen wallpapers. Kohr Edited December 28, 2006 by Kohr AutoIt LinksAutoIt CrapsGrid_PixelSearchAdvancedPixelGrab
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now