View difference between Paste ID: TEkyekfi and kWDLjfwY
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)