Guest User

Untitled

a guest
May 29th, 2013
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import _winreg
  2. import os
  3.  
  4. global __debug__
  5. __debug__ = True
  6.  
  7. def walkRegistry(regkey, keyToSearch="file_locations",
  8.                  valueNameToSearch="temp_dir", verbose=False):
  9.     """Recursively search the Windows registry (HKEY_CURRENT_USER),
  10.    starting at top <regkey>. Return a list of three tuples that contain
  11.    the registry key, the value and the associated data"""
  12.     if verbose:
  13.         print regkey
  14.     aReg = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, regkey)
  15.     i, keys, founds = 0, [], []
  16.     try:
  17.         while True:
  18.             i += 1
  19.             key = _winreg.EnumKey(aReg, i)
  20.             keys.append(key)
  21.             if key == keyToSearch:
  22.                 keyx = os.path.join(regkey, key)
  23.                 aReg = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, keyx)
  24.                 data, type_ = _winreg.QueryValueEx(aReg, valueNameToSearch)
  25.                 founds.append((keyx, valueNameToSearch, data))
  26.     except WindowsError:
  27.         for key in keys:
  28.             try:
  29.                 new_regkey = os.path.join(regkey, key)
  30.                 walkRegistry(new_regkey, keyToSearch,
  31.                              valueNameToSearch, verbose)
  32.             except WindowsError:
  33.                 pass
  34.     return founds
  35.  
  36. def setRegistry(regkey, keyToSet, valueToSet, replacementData, verbose=False):
  37.     """Search for <keyToSet> starting at top <regkey>. If <keyToSet> is found
  38.    exactly once, replace registry data associated with <valueToSet> with
  39.    <replacementData>."""
  40.     founds = walkRegistry(regkey, keyToSet, valueToSet, verbose)
  41.     if not founds:
  42.         return
  43.     elif len(founds) == 1:
  44.         keyx, valueNameToSearch, data = founds[0]
  45.     else:
  46.         msg = "Registry value %r is found multiple times"
  47.         raise ValueError(msg % valueToSet)
  48.  
  49.     if not __debug__:
  50.         try:
  51.             key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, keyx,
  52.                                   0, _winreg.KEY_ALL_ACCESS)
  53.         except:
  54.             key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, regkey)
  55.         _winreg.SetValueEx(keyx, valueToSet, 0, _winreg.REG_SZ,
  56.                            replacementData)
  57.         _winreg.CloseKey(keyx)
  58.  
  59. regkey = u"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"
  60. print founds = walkRegistry(regkey, u"Shell Folders", u"Cookies", True)
  61. setRegistry(regkey, u"Shell Folders", u"Cookies", "this is the replacement value", False)
Advertisement
Add Comment
Please, Sign In to add comment