On Jun 25, 9:48 pm, teh_sAbEr <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list