The wrong approach to things

T

teh_sAbEr

Ok, so this isn't necessarily a programming issue, but anyways. I've
managed to write that random wallpaper changer i've been wanting to
make, but i've run into a little problem. According to the MS
Knowledge Base, SystemParametersInfo() can't take a .jpg file as an
argument when changing the wallpaper (it doesn't work, i've tried it),
only .bmps so i'm stuck converting one of my many wallpapers from .jpg
to .bmp, passing that to SystemParametersInfo(), and deleting the
previous .bmp so that i don't have any duplicates. The problem with
this is that other members of my family use this computer too, and
they sometimes set the desktop wallpaper to some other, usually funny
picture they've got stored on the HD, and when I run this little
script it'll delete whatever the current wallpaper is, regardless of
whether its one of mine or not. Any suggestions on how to work around
this problem?

#random wallpaper changer!
import win32gui #use this to change the wallpaper.
import os
import os.path
import random
import Image
SPI_SETDESKWALLPAPER = 20 #It took me WAY too long to find them.
SPI_GETDESKWALLPAPER = 115 #I should keep these handy.



def RandomlySelectWallpaper(filePaths):
CurrentWallpaper =
win32gui.SystemParametersInfo(SPI_GETDESKWALLPAPER)
while True:
index = random.randint(0,len(filePaths)-1)
RandomlySelectedWallpaper = filePaths[index]
if RandomlySelectedWallpaper <> CurrentWallpaper:
break
print RandomlySelectedWallpaper
return RandomlySelectedWallpaper #it should be a string...

def ChangeDesktopWallpaper(RandomlySelectedWallpaper):
#so the RIGHT way to do this would be to use
#win32gui.SystemParametersInfo() to change the wallpaper.
#1) we convert the image to .bmp.
#Delete the old wallpaper, actual delete occurs after new
wallpaper has been set.
pathToCurrentWall =
win32gui.SystemParametersInfo(SPI_GETDESKWALLPAPER)
root,extension = os.path.splitext(RandomlySelectedWallpaper)
newFileName = root + '.bmp'
print "Wallpaper to delete: ", pathToCurrentWall
try:
#every so often something goes wrong at this stage in the
script
#and I can't figure out what. Something raises an IOError.
Image.open(RandomlySelectedWallpaper).save(newFileName)
print "File saved!"
except IOError:
print "Error while converting, please check filepath and
permissions."
print "Program will restart in an attempt to generate a
correct wallpaper."
Main()
win32gui.SystemParametersInfo(SPI_SETDESKWALLPAPER,newFileName,
1+2)
print "Removing: ", pathToCurrentWall
os.remove(pathToCurrentWall)

def Main():
#woot.
listOfWallpaperPaths = GenerateListOfWallpapers()
RandomlySelectedWall =
RandomlySelectWallpaper(listOfWallpaperPaths)
ChangeDesktopWallpaper(RandomlySelectedWall)

Main()
 
M

Mensanator

Ok, so this isn't necessarily a programming issue, but anyways. I've
managed to write that random wallpaper changer i've been wanting to
make, but i've run into a little problem. According to the MS
Knowledge Base, SystemParametersInfo() can't take a .jpg file as an
argument when changing the wallpaper (it doesn't work, i've tried it),
only .bmps so i'm stuck converting one of my many wallpapers from .jpg
to .bmp, passing that to SystemParametersInfo(), and deleting the
previous .bmp so that i don't have any duplicates. The problem with
this is that other members of my family use this computer too, and
they sometimes set the desktop wallpaper to some other, usually funny
picture they've got stored on the HD, and when I run this little
script it'll delete whatever the current wallpaper is, regardless of
whether its one of mine or not. Any suggestions on how to work around
this problem?

Why not rename the file instead of deleting it?
#random wallpaper changer!
import win32gui #use this to change the wallpaper.
import os
import os.path
import random
import Image
SPI_SETDESKWALLPAPER = 20 �#It took me WAY too long to find them.
SPI_GETDESKWALLPAPER = 115 #I should keep these handy.

def RandomlySelectWallpaper(filePaths):
� � CurrentWallpaper =
win32gui.SystemParametersInfo(SPI_GETDESKWALLPAPER)
� � while True:
� � � � index = random.randint(0,len(filePaths)-1)
� � � � RandomlySelectedWallpaper = filePaths[index]
� � � � if RandomlySelectedWallpaper <> CurrentWallpaper:
� � � � � � break
� � print RandomlySelectedWallpaper
� � return RandomlySelectedWallpaper #it should be a string...

def ChangeDesktopWallpaper(RandomlySelectedWallpaper):
� � #so the RIGHT way to do this would be to use
� � #win32gui.SystemParametersInfo() to change the wallpaper.
� � #1) we convert the image to .bmp.
� � #Delete the old wallpaper, actual delete occurs after new
wallpaper has been set.
� � pathToCurrentWall =
win32gui.SystemParametersInfo(SPI_GETDESKWALLPAPER)
� � root,extension = os.path.splitext(RandomlySelectedWallpaper)
� � newFileName = root + '.bmp'
� � print "Wallpaper to delete: ", pathToCurrentWall
� � try:
� � � � #every so often something goes wrong at this stage in the
script
� � � � #and I can't figure out what. Something raises an IOError.
� � � � Image.open(RandomlySelectedWallpaper).save(newFileName)
� � � � print "File saved!"
� � except IOError:
� � � � print "Error while converting, please check filepath and
permissions."
� � � � print "Program will restart in an attempt to generate a
correct wallpaper."
� � � � Main()
� � win32gui.SystemParametersInfo(SPI_SETDESKWALLPAPER,newFileName,
1+2)
� � print "Removing: ", pathToCurrentWall
� � os.remove(pathToCurrentWall)

def Main():
� � #woot.
� � listOfWallpaperPaths = GenerateListOfWallpapers()
� � RandomlySelectedWall =
RandomlySelectWallpaper(listOfWallpaperPaths)
� � ChangeDesktopWallpaper(RandomlySelectedWall)

Main()
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,586
Members
45,088
Latest member
JeremyMedl

Latest Threads

Top