home *** CD-ROM | disk | FTP | other *** search
- """
- regcopy.py
-
- Copy registry subtrees from one part to another, leaving the original in
- place.
-
- For example:
-
- python regcopy.py HKEY_CURRENT_USER\Software\ActivePython
- HKEY_LOCAL_MACHINE\Software\ActivePython
-
- Copyright ⌐ 2000 ActiveState Tool Corporation. All rights reserved.
-
- Author: Mike Smith <mikesm@ActiveState.com>
-
- """
-
-
- from _winreg import *
- import sys, string
-
- def main():
- _from = sys.argv[1]
- _to = sys.argv[2]
-
- root_from, key_name_from = split_key(_from)
- root_to, key_name_to = split_key(_to)
-
- print("Copying '" + _from + "' to '" + _to + "'")
- data = read_data(root_from, key_name_from)
- write_data(root_to, key_name_to, data)
-
-
- def read_data(root, key_name, info = {}):
- try:
- key = OpenKeyEx(root, key_name)
- except WindowsError, value:
- print value
- sys.exit(0)
-
- info[key_name] = {}
- info[key_name]['___values___'] = {}
- read_values(key, info[key_name]['___values___'])
-
- i = 0
- while(1):
- try:
- subkey_name = EnumKey(key, i)
- except EnvironmentError:
- break
-
- read_data(key, subkey_name, info[key_name])
- i = i + 1
- CloseKey(key)
- return info
-
- def read_values(key, info):
- i = 0
- while(1):
- try:
- name, data, type = EnumValue(key, i)
- except EnvironmentError:
- break
-
- info[name] = (data, type)
- i = i + 1
-
- def write_data(root, key_name, info):
- key = CreateKey(root, key_name)
- for subkey_name in info[key_name].keys():
- if(subkey_name == '___values___'):
- write_values(key, info[key_name]['___values___'])
- else:
- write_data(key, subkey_name, info[key_name])
- CloseKey(key)
-
- def write_values(root, info):
- for name in info.keys():
- SetValueEx(root, name, 0, info[name][1], info[name][0])
-
- def usage():
- print(sys.argv[0] + " <from_key> <to_key>")
-
- def split_key(key_name):
- root, path = string.split(key_name, '\\', 1)
-
- if root == 'HKEY_LOCAL_MACHINE':
- return HKEY_LOCAL_MACHINE, path
- elif root == 'HKEY_CURRENT_USER':
- return HKEY_CURRENT_USER, path
- elif root == 'HKEY_CLASSES_ROOT':
- return HEKY_CLASSES_ROOT, path
- else:
- print '\nEach argument must be prefixed with one of:\n\n\tHKEY_LOCAL_MACHINE\n\tHKEY_CURRENT_USER\n\tHKEY_CLASSES_ROOT'
- sys.exit(0)
-
- main()
-