SyDr
Сидра
- Сообщения
- 651
- Репутация
- 158
Есть функция для смены обоев на рабочем столе (взято с офф. форума):
Однако у меня она почему-то не работает. Выдаёт ошибку:
2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND
Сам файл по указанному пути существует. Система - Win7. Не работает только у меня?
Код:
#Include <WinAPI.au3>
#include <GDIPlus.au3>
Global Const $SPI_SETDESKWALLPAPER = 0x0014
Global Const $SPIF_UPDATEINIFILE = 0x0001
Global Const $SPIF_SENDCHANGE = 0x0002
Func _ChangeDesktopBackground($sFile, $iPosition=3)
Local $sCLSID, $tBuffer, $hImage, $sTemp
; Convert JPG image to BMP image
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
$sCLSID = _GDIPlus_EncodersGetCLSID("BMP")
$sTemp = _Str_ChangeFileExt($sFile, ".bmp")
_GDIPlus_ImageSaveToFile($hImage, $sTemp)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
; Set wallpaper position
Switch $iPosition
Case 1; Tile
RegWrite('HKCU\Control Panel\Desktop', 'TileWallpaper' , 'reg_sz', '1')
RegWrite('HKCU\Control Panel\Desktop', 'WallpaperStyle', 'reg_sz', '0')
Case 2; Center
RegWrite('HKCU\Control Panel\Desktop', 'TileWallpaper' , 'reg_sz', '0')
RegWrite('HKCU\Control Panel\Desktop', 'WallpaperStyle', 'reg_sz', '0')
Case 3; Stretch
RegWrite('HKCU\Control Panel\Desktop', 'TileWallpaper' , 'reg_sz', '0')
RegWrite('HKCU\Control Panel\Desktop', 'WallpaperStyle', 'reg_sz', '2')
EndSwitch
; Set wallpaper
$tBuffer = DllStructCreate("char Text[" & StringLen($sTemp) + 1 & "]")
DllStructSetData($tBuffer, "Text", $sTemp)
_WinAPI_SystemParametersInfo($SPI_SETDESKWALLPAPER, 1, DllStructGetPtr($tBuffer), BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE))
EndFunc
Func _Str_ChangeFileExt($sFileName, $sExtension)
Local $iIndex
$iIndex = _Str_LastDelimiter(".\:", $sFileName)
if ($iIndex = 0) or (StringMid($sFileName, $iIndex, 1) <> ".") then $iIndex = StringLen($sFileName) + 1
Return StringLeft($sFileName, $iIndex - 1) & $sExtension
EndFunc
Func _Str_LastDelimiter($sDelimiters, $sString)
Local $iI, $iN, $sDelimiter
for $iI = 1 to StringLen($sDelimiters)
$sDelimiter = StringMid($sDelimiters, $iI, 1)
$iN = StringInStr($sString, $sDelimiter, 0, -1)
if $iN > 0 then Return $iN
next
EndFunc
Однако у меня она почему-то не работает. Выдаёт ошибку:
2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND
Сам файл по указанному пути существует. Система - Win7. Не работает только у меня?