+class WIN32Changer(BaseChanger):
+ name = "Windows"
+ _ConvertedWallpaperLocation = os.path.join(os.environ.get('APPDATA', os.path.expanduser('~')), 'wallchanger')
+
+ def __init__(self, *args, **kwargs):
+ BaseChanger.__init__(self, *args, **kwargs)
+ if not self.convert:
+ logging.warn('Running on windows, but convert is not set')
+
+ def remove_old_image_cache(self):
+ """Cleans up any old temp images"""
+ if not os.path.isdir(self._ConvertedWallpaperLocation):
+ os.mkdir(self._ConvertedWallpaperLocation)
+ for fullpath, filenames, dirnames in os.walk(self._ConvertedWallpaperLocation, topdown=False):
+ for filename in filenames:
+ os.unlink(os.path.join(fullpath, filename))
+ for dirname in dirnames:
+ os.unlink(os.path.join(fullpath, dirname))
+
+ def set_image(self, filename):
+ import ctypes
+ user32 = ctypes.windll.user32
+
+ # Taken from the Platform SDK
+ SPI_SETDESKWALLPAPER = 20
+ SPIF_SENDWININICHANGE = 2
+
+ if self.convert:
+ filename, ret = self.convert_image_format(filename)
+ if not ret:
+ logging.debug("Convert failed")
+ return False
+
+ # Parameters for SystemParametersInfoA are:
+ # (UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
+ user32.SystemParametersInfoA(
+ SPI_SETDESKWALLPAPER,
+ 0,
+ filename,
+ SPIF_SENDWININICHANGE,
+ )
+ return True
+