python读写windows注册表,python读写windows,本文封装了_winreg


本文封装了_winreg,提供更方便的读写windows注册表的方法。

'''Module for accessing MWR.This module provides an advanced, easy-to-use API foraccessing and mutating the Microsoft Windows Registry.'''################################################################################__version__ = '$Revision: 0 $'__date__ = 'March 19, 2007'__author__ = 'Stephen "Zero" Chappell <my.bios@gmail.com>'__credits__ = '''\S. Schaub, for introducing me to programming.B. Gates, for creating the Windows Registry.F. Drake, for enforcing good Python documentation.'''################################################################################import _winregimport sys as _sysimport time as _time################################################################################class HKEY:    'Hive Constants'    CLASSES_ROOT = -2147483648    CURRENT_USER = -2147483647    LOCAL_MACHINE = -2147483646    USERS = -2147483645    CURRENT_CONFIG = -2147483643class KEY:    'Mode Constants'    QUERY_VALUE = 1    SET_VALUE = 2    CREATE_SUB_KEY = 4    ENUMERATE_SUB_KEYS = 8    NOTIFY = 16    CREATE_LINK = 32    WRITE = 131078    EXECUTE = 131097    READ = 131097    ALL_ACCESS = 983103class REG:    'Type Constants'    NONE = 0    SZ = 1    EXPAND_SZ = 2    BINARY = 3    DWORD = 4    DWORD_BIG_ENDIAN = 5    LINK = 6    MULTI_SZ = 7    RESOURCE_LIST = 8    FULL_RESOURCE_DESCRIPTOR = 9    RESOURCE_REQUIREMENTS_LIST = 10    QWORD = 11################################################################################class _Value(object):    '_Value(value) -> _Value'    def __init__(self, value):        'Initialize the _Value object.'        self.__value = value        self.__repr = '%s(%r)' % (self.__class__.__name__, value)    def __repr__(self):        'Return the object\'s representation.'        return self.__repr    def __get_value(self):        'Private class method.'        return self.__value    value = property(__get_value, doc='Value of this object.')class REG_NONE(_Value): passclass REG_SZ(_Value): passclass REG_EXPAND_SZ(_Value): passclass REG_BINARY(_Value): passclass REG_DWORD(_Value): passclass REG_DWORD_BIG_ENDIAN(_Value): passclass REG_LINK(_Value): passclass REG_MULTI_SZ(_Value): passclass REG_RESOURCE_LIST(_Value): passclass REG_FULL_RESOURCE_DESCRIPTOR(_Value): passclass REG_RESOURCE_REQUIREMENTS_LIST(_Value): passclass REG_QWORD(_Value): pass################################################################################class Registry(object):    'Registry([computer]) -> Registry'    def __init__(self, computer=None):        'Initialize the Registry object.'        self.__computer = computer        self.__repr = 'Registry()' if computer is None else 'Registry(%r)' % computer    def __repr__(self):        'Return the object\'s representation.'        return self.__repr    def __iter__(self):        'Iterate over hives defined in HKEY.'        return (Key(key, computer=self.__computer) for key in map(HKEY.__dict__.__getitem__, filter(str.isupper, dir(HKEY))))    def __HKEY_CLASSES_ROOT(self):        'Private class method.'        return Key(HKEY.CLASSES_ROOT, computer=self.__computer)    def __HKEY_CURRENT_USER(self):        'Private class method.'        return Key(HKEY.CURRENT_USER, computer=self.__computer)    def __HKEY_LOCAL_MACHINE(self):        'Private class method.'        return Key(HKEY.LOCAL_MACHINE, computer=self.__computer)    def __HKEY_USERS(self):        'Private class method.'        return Key(HKEY.USERS, computer=self.__computer)    def __HKEY_CURRENT_CONFIG(self):        'Private class method.'        return Key(HKEY.CURRENT_CONFIG, computer=self.__computer)    HKEY_CLASSES_ROOT = property(__HKEY_CLASSES_ROOT, doc='The CLASSES_ROOT hive.')    HKEY_CURRENT_USER = property(__HKEY_CURRENT_USER, doc='The CURRENT_USER hive.')    HKEY_LOCAL_MACHINE = property(__HKEY_LOCAL_MACHINE, doc='The LOCAL_MACHINE hive.')    HKEY_USERS = property(__HKEY_USERS, doc='The USERS hive.')    HKEY_CURRENT_CONFIG = property(__HKEY_CURRENT_CONFIG, doc='The CURRENT_CONFIG hive.')################################################################################class Key(object):    '''Key(key[, subkey][, mode][, computer]) -> Key    Key(key) -> Key    Key(key, subkey) -> Key    Key(key, mode=value) -> Key    Key(key, subkey, mode) -> Key    Key(key, computer=value) -> Key    Key(key, subkey, computer=value) -> Key    Key(key, mode=value, computer=value) -> Key    Key(key, subkey, mode, computer) -> Key'''    def __init__(self, key, subkey=None, mode=None, computer=None):        'Initialize the Key object.'        if isinstance(key, (int, _winreg.HKEYType)) and subkey is None and mode is None and computer is None:            self.__key = _winreg.OpenKey(key, '')        elif isinstance(key, Key) and subkey is None and mode is None and computer is None:            self.__key = _winreg.OpenKey(key.__key, '')        elif isinstance(key, (int, _winreg.HKEYType)) and isinstance(subkey, str) and mode is None and computer is None:            self.__key = _winreg.OpenKey(key, subkey)        elif isinstance(key, Key) and isinstance(subkey, str) and mode is None and computer is None:            self.__key = _winreg.OpenKey(key.__key, subkey)        elif isinstance(key, (int, _winreg.HKEYType)) and subkey is None and isinstance(mode, int) and computer is None:            self.__key = _winreg.OpenKey(key, '', 0, mode)        elif isinstance(key, Key) and subkey is None and isinstance(mode, int) and computer is None:            self.__key = _winreg.OpenKey(key.__key, '', 0, mode)        elif isinstance(key, (int, _winreg.HKEYType)) and isinstance(subkey, str) and isinstance(mode, int) and computer is None:            self.__key = _winreg.OpenKey(key, subkey, 0, mode)        elif isinstance(key, Key) and isinstance(subkey, str) and isinstance(mode, int) and computer is None:            self.__key = _winreg.OpenKey(key.__key, subkey, 0, mode)        elif isinstance(key, int) and subkey is None and mode is None and isinstance(computer, str):            self.__key = _winreg.ConnectRegistry(computer, key)        elif isinstance(key, int) and isinstance(subkey, str) and mode is None and isinstance(computer, str):            self.__key = _winreg.OpenKey(_winreg.ConnectRegistry(computer, key), subkey)        elif isinstance(key, int) and subkey is None and isinstance(mode, int) and isinstance(computer, str):            self.__key = _winreg.OpenKey(_winreg.ConnectRegistry(computer, key), '', 0, mode)        elif isinstance(key, int) and isinstance(subkey, str) and isinstance(mode, int) and isinstance(computer, str):            self.__key = _winreg.OpenKey(_winreg.ConnectRegistry(computer, key), subkey, 0, mode)        else:            raise TypeError, 'Please check documentation.'        self.__keys = Keys(self.__key)        self.__values = Values(self.__key)        self.__repr = 'Key(%s)' % ', '.join([repr(key)] + ['%s=%r' % (key, value) for key, value in zip(('subkey', 'mode', 'computer'), (subkey, mode, computer)) if value is not None])    def __repr__(self):        'Return the object\'s representation.'        return self.__repr    def save(self, file_name):        'Save this key to file.'        _winreg.SaveKey(self.__key, file_name)    def load(self, subkey, file_name):        'Load subkey from file.'        _winreg.LoadKey(self.__key, subkey, file_name)    def __get_keys(self):        'Private class method.'        return self.__keys    def __set_keys(self, keys):        'Private class method.'        if isinstance(keys, str):            _winreg.CreateKey(self.__key, keys)        elif isinstance(keys, (list, tuple)):            for key in keys:                self.keys = key        else:            raise TypeError, 'Key Could Not Be Created'    def __del_keys(self):        'Private class method.'        try:            while True:                _winreg.DeleteKey(self.__key, _winreg.EnumKey(self.__key, 0))        except EnvironmentError:            pass    def __get_values(self):        'Private class method.'        return self.__values    def __set_values(self, values):        'Private class method.'        if isinstance(values, str):            _winreg.SetValueEx(self.__key, values, 0, REG.SZ, _winreg.QueryValue(self.__key, ''))        elif isinstance(values, (list, tuple)):            for value in values:                self.values = value        else:            raise TypeError, 'Value Could Not Be Created'    def __del_values(self):        'Private class method.'        try:            while True:                _winreg.DeleteValue(self.__key, _winreg.EnumValue(self.__key, 0)[0])        except EnvironmentError:            pass    def __get_value(self):        'Private class method.'        return _winreg.QueryValue(self.__key, '')    def __set_value(self, value):        'Private class method.'        _winreg.SetValue(self.__key, '', REG.SZ, value)    def __del_value(self):        'Private class method.'        _winreg.DeleteValue(self.__key, '')    def __get_info(self):        'Private class method.'        return Info(*_winreg.QueryInfoKey(self.__key))    keys = property(__get_keys, __set_keys, __del_keys, 'Keys of this key.')    values = property(__get_values, __set_values, __del_values, 'Values of this key.')    value = property(__get_value, __set_value, __del_value, 'Value of this key.')    info = property(__get_info, doc='Information about this key.')################################################################################class Keys(object):    'Keys(key) -> Keys'    def __init__(self, key):        'Initialize the Keys object.'        self.__key = key        self.__repr = 'Keys(%r)' % key    def __repr__(self):        'Return the object\'s representation.'        return self.__repr    def __len__(self):        'Return the number of keys.'        return _winreg.QueryInfoKey(self.__key)[0]    def __getitem__(self, key):        'Return the specified key.'        return Key(self.__key, key)    def __setitem__(self, key, value):        'Assign the item to a key.'        key = Key(_winreg.CreateKey(self.__key, key), mode=KEY.ALL_ACCESS)        for name in value.values:            key.values[name] = value.values[name]        for name in value.keys:            key.keys[name] = value.keys[name]    def __delitem__(self, key):        'Delete the specified key.'        _winreg.DeleteKey(self.__key, key)    def __iter__(self):        'Iterate over the key names.'        return iter(tuple(_winreg.EnumKey(self.__key, index) for index in xrange(_winreg.QueryInfoKey(self.__key)[0])))    def __contains__(self, item):        'Check for a key\'s existence.'        item = item.lower()        for index in xrange(_winreg.QueryInfoKey(self.__key)[0]):            if _winreg.EnumKey(self.__key, index).lower() == item:                return True        return False################################################################################class Values(object):    'Values(key) -> Values'    TYPES = REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_BINARY, REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_LINK, REG_MULTI_SZ, REG_RESOURCE_LIST, REG_FULL_RESOURCE_DESCRIPTOR, REG_RESOURCE_REQUIREMENTS_LIST, REG_QWORD    def __init__(self, key):        'Initialize the Values object.'        self.__key = key        self.__repr = 'Values(%r)' % key    def __repr__(self):        'Return the object\'s representation.'        return self.__repr    def __len__(self):        'Return the number of values.'        return _winreg.QueryInfoKey(self.__key)[1]    def __getitem__(self, key):        'Return the specified value.'        item_value, item_type = _winreg.QueryValueEx(self.__key, key)        return self.TYPES[item_type](item_value)    def __setitem__(self, key, value):        'Assign the item to a value.'        if isinstance(value, self.TYPES):            _winreg.SetValueEx(self.__key, key, 0, list(self.TYPES).index(value.__class__), value.value)        else:            _winreg.SetValueEx(self.__key, key, 0, _winreg.QueryValueEx(self.__key, key)[1], value)    def __delitem__(self, key):        'Delete the specified value.'        _winreg.DeleteValue(self.__key, key)    def __iter__(self):        'Iterate over the value names.'        return iter(tuple(_winreg.EnumValue(self.__key, index)[0] for index in xrange(_winreg.QueryInfoKey(self.__key)[1])))    def __contains__(self, item):        'Check for a value\'s existence.'        item = item.lower()        for index in xrange(_winreg.QueryInfoKey(self.__key)[1]):            if _winreg.EnumValue(self.__key, index)[0].lower() == item:                return True        return False################################################################################class Info(object):    'Info(keys, values, modified) -> Info'    def __init__(self, keys, values, modified):        'Initialize the Info object.'        self.__keys = keys        self.__values = values        self.__modified = modified        self.__repr = 'Info(%r, %r, %r)' % (keys, values, modified)    def __repr__(self):        'Return the object\'s representation.'        return self.__repr    def __get_keys(self):        'Private class method.'        return self.__keys    def __get_values(self):        'Private class method.'        return self.__values    def __get_modified(self):        'Private class method.'        return self.__modified    def __get_difference(self):        'Private class method.'        return _time.time() + 11644473600.0 - self.__modified / 10000000.0    keys = property(__get_keys, doc='Number of keys.')    values = property(__get_values, doc='Number of values.')    modified = property(__get_modified, doc='Time last modified.')    difference = property(__get_difference, doc='Seconds since modified.')################################################################################if __name__ == '__main__':    _sys.stdout.write('Content-Type: text/plain\n\n')    _sys.stdout.write(file(_sys.argv[0]).read())

评论关闭