Working with the Windows Registry
s0suk3 at gmail.com
s0suk3 at gmail.com
Wed Jun 25 23:30:38 EDT 2008
On Jun 25, 9:48 pm, teh_sAbEr <teh.sa... at gmail.com> wrote:
> Hi everybody. I'm trying to write a script that'll change desktop
> wallpaper every time its run. Heres what I've gotten so far:
>
> #random wallpaper changer!
> import _winreg
> from os import walk
> from os.path import exists
> from random import randint
>
> #first grab a registry handle.
> handle = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,'Control Panel
> \Desktop',_winreg.KEY_SET_VALUE)
>
> def GenerateListOfWallpapers():
> targetDir = 'C:\Documents and Settings\Enrico Jr\My Documents\Jr
> \'s Wallpapers'
> fileNames = []
> filePaths = []
> if exists(targetDir):
> #proceed to make the list of files
> for x,y,z in walk(targetDir):
> for name in z:
> fileNames.append(name)
> for item in fileNames:
> filePaths.append(targetDir + '\\' + item)
> return filePaths
>
> def RandomlySelectWallpaper(filePaths):
> index = randint(0,len(filePaths)-1)
> RandomlySelectedWallpaper = filePaths[index]
> return RandomlySelectedWallpaper #it should be a string...
>
> #now to edit the wallpaper registry key
> newWallpaper = RandomlySelectWallpaper(GenerateListOfWallpapers())
> print "Registry Handle Created."
> print "Random wallpaper selected."
> _winreg.SetValueEx(handle,'ConvertedWallpaper',
> 0,_winreg.REG_SZ,newWallpaper)
> print "New wallpaper value set."
>
> The problem is, every time I run it, I get an "Access Denied" error
> when it tries to execute
> _winreg.SetValueEx(), even though i've opened the key with the
> KEY_SET_VALUE mask like it said in the help docs. Could there be
> another problem or a better way to do this?
Note the line
#first grab a registry handle.
handle = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Control Panel
\Desktop', _winreg.KEY_SET_VALUE)
OpenKey() takes four arguments: (1) The Registry key handle or one of
the predefined constants, (2) the string containing the subkey to
open, (3) the 'res' (which I don't know what is :), and the 'sam',
which is the access mask (KEY_SET_VALUE, in this case). You are only
passing three arguments, so the access mask is going to the 'res'
argument instead of the 'sam' argument. Pass instead 0 as the res:
handle = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
'Control Panel\Desktop',
0,
_winreg.KEY_SET_VALUE)
Regards,
Sebastian
More information about the Python-list
mailing list