Ah, never mind, got it to work. Here's the code now. I hope I won't run into another problems later :D
<code snippet> #Goes through all keys and subkeys in the selected hive (defined as root) and replaces the value 'old' with the value 'new' # #IMPORTANT! You should always back up the registry before attempting to modify it. #The author of this script CANNOT BE HELD RESPONSIVE for any damage caused by running this script. # #To customize the script to your liking, you can alter the values old, new, root. # #old and new can be any string value #root has to be one of the following: # # _winreg.HKEY_LOCAL_MACHINE # _winreg.HKEY_CURRENT_USER # _winreg.HKEY_CLASSES_ROOT # _winreg.HKEY_USERS # _winreg.HKEY_CURRENT_CONFIG import _winreg #For accessing windows registry, included in Python 2.0. import sys #For reading arguments (command line), included in every Python release. HIVES = { "HKEY_LOCAL_MACHINE" : _winreg.HKEY_LOCAL_MACHINE, "HKEY_CURRENT_USER" : _winreg.HKEY_CURRENT_USER, "HKEY_CLASSES_ROOT" : _winreg.HKEY_CLASSES_ROOT, "HKEY_USERS" : _winreg.HKEY_USERS, "HKEY_CURRENT_CONFIG" : _winreg.HKEY_CURRENT_CONFIG } class RegKey: def __init__ (self, name, key): self.name = name self.key = key def __str__ (self): return self.name def walk (top): """walk the registry starting from the key represented by top in the form HIVE\\key\\subkey\\..\\subkey and generating key, subkey_names, values at each level. key is a lightly wrapped registry key, including the name and the HKEY object. subkey_names are simply names of the subkeys of that key values are 3-tuples containing (name, data, data-type). See the documentation for _winreg.EnumValue for more details. """ try: if "\\" not in top: top += "\\" root, subkey = top.split ("\\", 1) # print "KEY:", root + "\\" + subkey key = _winreg.OpenKey (HIVES[root], subkey, 0, _winreg.KEY_READ | _winreg.KEY_SET_VALUE) subkeys = [] i = 0 while True: try: subkeys.append (_winreg.EnumKey (key, i)) i += 1 except EnvironmentError: break values = [] i = 0 while True: try: values.append (_winreg.EnumValue (key, i)) i += 1 except EnvironmentError: break yield RegKey (top, key), subkeys, values for subkey in subkeys: for result in walk (top + "\\" + subkey): yield result except WindowsError: # print 'Could not open key', root + "\\" + subkey + ", access denied!\n" pass except: print 'Other error!' def main(start, startHandle, old, new): basickeys = [] i = 0 while True: try: basickeys.append (_winreg.EnumKey (startHandle, i)) i += 1 except EnvironmentError: # print i, 'subkeys found!' break for x in range(len(basickeys)): for key, subkey_names, values in walk (start + "\\" + basickeys[x]): # print key for (name, data, type) in values: # print " ", name, "=>", data if type == _winreg.REG_SZ: Character = 0 Correct = 0 FoundStart = FoundEnd = 0 Found = False for y in range(len(data)): try: if Character < len(old): # print old[Character], data[y] if old[Character] in data[y]: Character = Character + 1 Correct = Correct + 1 except: pass if Correct is len(old): # print 'Debug!' Replace = "" Character = 0 for y in range(len(data)): if not Found: if old[0] in data[y]: FoundStart = int(y) FoundEnd = FoundStart + len(old) Found = True # for y in range(FoundStart): # Replace = Replace + data[y] for y in range(len(new)): Replace = Replace + new[y] # for y in range(FoundEnd, len(data)): # Replace = Replace + data[y] Found = True if Found: # print "OLD:", old, "will be replaced with:", Replace _winreg.SetValueEx (key.key, name, 0, type, data.replace (old, Replace)) def help(): #Show help print 'USAGE: Registry.py [HIVE] [OLD] [NEW]' print ' HIVE: The root key in registry you want to go through.' print ' HKEY_CLASSES_ROOT' print ' HKEY_CURRENT_USER' print ' HKEY_LOCAL_MACHINE' print ' HKEY_USERS' print ' HKEY_CURRENT_CONFIG' print '' print ' OLD: The value to search for.' print ' Wrap multiword strings with \"\".' print '' print ' NEW: The value which will replace OLD.' print ' Wrap multiword strings with \"\".' #Check for arguments #HIVE, old, new while True: #Check if invalid number of arguments are given if len(sys.argv) is 1: help() break # for x in range(len(sys.argv)): # print 'sys.argv[' + str(x) + ']:', sys.argv[x] #Check if hive is first if sys.argv[1].upper() in ('HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 'HKEY_CLASSES_ROOT', 'HKEY_USERS', 'HKEY_CURRENT_CONFIG'): start = sys.argv[1].upper() else: help() break #Check that not only one argument is given (at least two required, preferably three) if len(sys.argv) is 2: help() break old = sys.argv[2] if len(sys.argv) is 4: new = sys.argv[3] else: help() break if start in ('HKEY_CLASSES_ROOT'): startHandle = _winreg.HKEY_CLASSES_ROOT elif start in ('HKEY_CURRENT_USER'): startHandle = _winreg.HKEY_CURRENT_USER elif start in ('HKEY_LOCAL_MACHINE'): startHandle = _winreg.HKEY_LOCAL_MACHINE elif start in ('HKEY_USERS'): startHandle = _winreg.HKEY_USERS elif start in ('HKEY_CURRENT_CONFIG'): startHandle = _winreg.HKEY_CURRENT_CONFIG else: help() break main(start, startHandle, old, new) break </code> -- http://mail.python.org/mailman/listinfo/python-list