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) |