ezzetabi Posted November 1, 2004 Share Posted November 1, 2004 (edited) Larry said that my ChangeWallpaper func can't work with Active destop actived. I can't test, but Larry words are true 99% of times. So you are warned. expandcollapse popupAutoItSetOption("MustDeclareVars", 1) If WinExists('Wallpaper randomizer') Then WinClose('Wallpaper randomizer') AutoItWinSetTitle('Wallpaper randomizer') Dim $sFolder, $iMin, $iRtime, $aFiles, $bRandom, $c If FileExists(@UserName & '.ini') Then $sFolder = IniRead(@UserName & '.ini', 'Settings', 'Folder', '') $iMin = IniRead(@UserName & '.ini', 'Settings', 'Min', '') $iRtime = IniRead(@UserName & '.ini', 'Settings', 'RTime', '') $bRandom = IniRead(@UserName & '.ini', 'Settings', 'Random', '') Else $sFolder = FileSelectFolder('Select the folder where seek the .bmp files', @HomeDrive) If @error Then Exit If StringRight($sFolder, 1) <> '\' Then $sFolder = $sFolder & '\' $iMin = InputBox('Question', 'Set minimal time, in minutes, you want to wait to change wallpaper', 3) If @error Then Exit Do $iRtime = InputBox('Question', 'Set max time, in minutes, you want to wait to change wallpaper', 3) - $iMin If @error Then Exit If $iRtime >= 0 Then ExitLoop MsgBox(4096 + 16, 'Error', 'Min time must be less than max time') Until 0 $bRandom = MsgBox(4096 + 4 + 32, 'Question', 'Do you want to change wallpapers in a random order?') ;$bRandom is for 6 yes and for 7 no IniWrite(@UserName & '.ini', 'Settings', 'Folder', $sFolder) IniWrite(@UserName & '.ini', 'Settings', 'Min', $iMin) IniWrite(@UserName & '.ini', 'Settings', 'RTime', $iRtime) IniWrite(@UserName & '.ini', 'Settings', 'Random', $bRandom) EndIf $aFiles = _FileSearch($sFolder & '*.bmp', 1) If $aFiles[0] <= 1 Then MsgBox(4096 + 16, 'Error', 'Not enough .bmp files found' & @LF & 'To change wallpaper you need at least two pictures.') Exit EndIf $c = 0 While 1 If $bRandom = 7 Then $c = $c + 1 If $c > $aFiles[0] Then $c = 1 Else $c = Int(Random(1, $aFiles[0] + 1)) EndIf _ChangeWallpaper($aFiles[$c], 2) Sleep($iMin * 60000 + Int(Random(0, $iRtime + 1)) * 60000) $aFiles = _FileSearch($sFolder & '*.bmp', 1) If $aFiles[0] <= 1 Then Exit Wend Exit Func _ChangeWallpaper($sFile, $iType) If Not FileExists($sFile) Then SetError(1) Return -1 EndIf If StringTrimLeft($sFile, StringInStr($sFile, '.', 0, -1)) <> 'bmp' Then SetError(2) Return -2 EndIf Select Case $iType = 1 RegWrite('HKCU\Control Panel\Desktop', 'TileWallpaper', 'reg_sz', '1') RegWrite('HKCU\Control Panel\Desktop', 'WallpaperStyle', 'reg_sz', '0') Case $iType = 2 RegWrite('HKCU\Control Panel\Desktop', 'TileWallpaper', 'reg_sz', '0') RegWrite('HKCU\Control Panel\Desktop', 'WallpaperStyle', 'reg_sz', '0') Case $iType = 3 RegWrite('HKCU\Control Panel\Desktop', 'TileWallpaper', 'reg_sz', '0') RegWrite('HKCU\Control Panel\Desktop', 'WallpaperStyle', 'reg_sz', '2') Case Else ; EndSelect RegWrite('HKCU\Control Panel\Desktop', 'Wallpaper', 'reg_sz', $sFile) DllCall("user32", "int", "SystemParametersInfo", "int", 20, "int", 0, "str", $sFile, "int", 0) Return 0 EndFunc ;==>_ChangeWallpaper Func _FileSearch($sIstr, $bSF) Local $sInst, $bSF, $sCriteria, $sPath, $c, $sBuffer, $aFolders = '', $iH, $sCS, $sCF, $sCP, $sOutPut = '', $aNull[1] $sPath = StringLeft($sIstr, StringInStr($sIstr, '\', 0, -1)) If $sPath = '' Then $sPath = @WorkingDir & '\' $sCriteria = StringTrimLeft($sIstr, StringInStr($sIstr, '\', 0, -1)) If $sCriteria = '' Then $sCriteria = '*.*' $sBuffer = $sPath & '*.*' & @LF If $bSF = 1 Then Do $sCS = StringLeft($sBuffer, StringInStr($sBuffer, @LF, 0, 1) - 1) $sCP = StringLeft($sCS, StringInStr($sCS, '\', 0, -1)) $iH = FileFindFirstFile($sCS) While $iH <> - 1 $sCF = FileFindNextFile($iH) If @error Then FileClose($iH) ExitLoop EndIf If $sCF = '.' Or $sCF = '..' Then ContinueLoop If StringInStr(FileGetAttrib($sCP & $sCF), 'd') Then $aFolders = $aFolders & $sCP & $sCF & '\' & @LF $sBuffer = $sBuffer & $sCP & $sCF & '\*.*' & @LF EndIf Wend $sBuffer = StringReplace($sBuffer, $sCS & @LF, '') Until $sBuffer = '' EndIf $aFolders = StringSplit($sPath & @LF & $aFolders, @LF) ;Now we have all folders where look for. For $c = 1 To $aFolders[0] If $aFolders[$c] = '' Then ContinueLoop $iH = FileFindFirstFile($aFolders[$c] & $sCriteria) While $iH <> - 1 $sCF = FileFindNextFile($iH) If @error Then FileClose($iH) ExitLoop EndIf If $sCF = '.' Or $sCF = '..' Then ContinueLoop $sOutPut = $sOutPut & $aFolders[$c] & $sCF & @LF Wend Next If $sOutPut = '' Then $aNull[0] = 0 Return $aNull[0] Else Return StringSplit(StringTrimRight($sOutPut, 1), @LF) EndIf EndFunc ;==>_FileSearch Edited November 2, 2004 by ezzetabi Link to comment Share on other sites More sharing options...
ezzetabi Posted November 2, 2004 Author Share Posted November 2, 2004 New, probably final, version. Link to comment Share on other sites More sharing options...
konan Posted November 3, 2004 Share Posted November 3, 2004 Good idea Link to comment Share on other sites More sharing options...
ezzetabi Posted November 3, 2004 Author Share Posted November 3, 2004 Thanks. Link to comment Share on other sites More sharing options...
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