home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 May / PCWorld_2002-05_cd.bin / Software / TemaCD / activepython / ActivePython-2.1.1.msi / Python21_Support_regcopy.pyw < prev    next >
Encoding:
Text File  |  2001-07-26  |  2.3 KB  |  98 lines

  1. """
  2. regcopy.py
  3.  
  4. Copy registry subtrees from one part to another, leaving the original in
  5. place.
  6.  
  7. For example:
  8.  
  9.    python regcopy.py HKEY_CURRENT_USER\Software\ActivePython 
  10.              HKEY_LOCAL_MACHINE\Software\ActivePython
  11.  
  12.    Copyright ⌐ 2000 ActiveState Tool Corporation. All rights reserved.
  13.  
  14.    Author: Mike Smith <mikesm@ActiveState.com>
  15.  
  16. """
  17.    
  18.  
  19. from _winreg import *
  20. import sys, string
  21.  
  22. def main():
  23.     _from = sys.argv[1]
  24.     _to = sys.argv[2]
  25.  
  26.     root_from, key_name_from = split_key(_from)
  27.     root_to, key_name_to = split_key(_to)
  28.     
  29.     print("Copying '" + _from + "' to '" + _to + "'")
  30.     data = read_data(root_from, key_name_from)
  31.     write_data(root_to, key_name_to, data)
  32.  
  33.  
  34. def read_data(root, key_name, info = {}):
  35.     try:
  36.     key = OpenKeyEx(root, key_name)
  37.     except WindowsError, value:
  38.         print value
  39.     sys.exit(0)
  40.  
  41.     info[key_name] = {}
  42.     info[key_name]['___values___'] = {}
  43.     read_values(key, info[key_name]['___values___'])
  44.  
  45.     i = 0
  46.     while(1):
  47.     try:
  48.         subkey_name = EnumKey(key, i)
  49.     except EnvironmentError:
  50.         break
  51.  
  52.     read_data(key, subkey_name, info[key_name])
  53.     i = i + 1
  54.     CloseKey(key)
  55.     return info
  56.  
  57. def read_values(key, info):
  58.     i = 0
  59.     while(1):
  60.     try:
  61.         name, data, type = EnumValue(key, i)
  62.     except EnvironmentError:
  63.         break
  64.  
  65.     info[name] = (data, type)
  66.     i = i + 1
  67.  
  68. def write_data(root, key_name, info):
  69.     key = CreateKey(root, key_name)
  70.     for subkey_name in info[key_name].keys():
  71.     if(subkey_name == '___values___'):
  72.         write_values(key, info[key_name]['___values___'])
  73.     else:
  74.         write_data(key, subkey_name, info[key_name])
  75.     CloseKey(key)
  76.  
  77. def write_values(root, info):
  78.     for name in info.keys():
  79.     SetValueEx(root, name, 0, info[name][1], info[name][0])
  80.         
  81. def usage():
  82.     print(sys.argv[0] + " <from_key> <to_key>")
  83.  
  84. def split_key(key_name):
  85.     root, path = string.split(key_name, '\\', 1)
  86.  
  87.     if root == 'HKEY_LOCAL_MACHINE':
  88.     return HKEY_LOCAL_MACHINE, path
  89.     elif root == 'HKEY_CURRENT_USER':
  90.     return HKEY_CURRENT_USER, path
  91.     elif root == 'HKEY_CLASSES_ROOT':
  92.     return HEKY_CLASSES_ROOT, path
  93.     else:
  94.     print '\nEach argument must be prefixed with one of:\n\n\tHKEY_LOCAL_MACHINE\n\tHKEY_CURRENT_USER\n\tHKEY_CLASSES_ROOT'
  95.     sys.exit(0)
  96.  
  97. main()
  98.