SHOW:
|
|
- or go back to the newest paste.
| 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", False) |
| 61 | + | setRegistry(regkey, u"Shell Folders", u"Cookies", "this is the replacement value", False) |