windows注册表操作

#!/usr/local/bin/python3
__author__ = '曹植'

import win32api
import win32con
import os
import pywintypes
import time


class GoogleRegedit(object):
    """
    谷歌浏览器注册表方法实现
    """

    def __init__(self, path):
        self.reg_root = win32con.HKEY_CURRENT_USER
        # self.reg_path = r"Software\Google\Chrome\PreferenceMACs\Default"+'\extensions.settings'
        self.reg_path = path
        self.reg_flags = win32con.WRITE_OWNER | win32con.KEY_WOW64_64KEY | win32con.KEY_ALL_ACCESS
        try:
            self.key = win32api.RegOpenKey(self.reg_root, self.reg_path, 0, self.reg_flags)
        except pywintypes.error:
            self.key = win32api.RegOpenKey(self.reg_root,
                                           r'Software\Google\Chrome\PreferenceMACs\Default', 0,
                                           self.reg_flags)
        # self.default_value = win32api.RegQueryValue(self.key, '')  # 该项的默认值,输出为空表示该默认值为设置

    def read(self, name):
        """
        读取项值名称为name的值
        :param name:
        :return:
        """
        return win32api.RegQueryValueEx(self.key, name)

    def get_info(self):
        """
        返回项的子项数目、项值数目,以及最后一次修改时间
        :return:
        """
        return win32api.RegQueryInfoKey(self.key)

    def subkey_traversal(self):
        """
        子键的遍历
        :return:
        """
        return win32api.RegEnumKeyEx(self.key)

    def traversal(self):
        """
        键值对的遍历
        :return:
        """
        try:
            value = []
            i = 0
            while True:
                value.append(win32api.RegEnumValue(self.key, i))
                i += 1
        except Exception as e:
            pass
        return value

    def create_subkey(self, name):
        """
        创建一个子项
        :return:
        """
        win32api.RegCreateKey(self.key, name)

    def delete_subkey(self, name):
        """
        删除一个子项
        :return:
        """
        win32api.RegDeleteKey(self.key, name)

    def create(self, k, value):
        """
        创建键值
        :param k:
        :param value:
        :return:
        """
        key, _ = win32api.RegCreateKeyEx(self.reg_root, self.reg_path, self.reg_flags)
        win32api.RegSetValueEx(self.key, k, 0, win32con.REG_SZ, value)

    def delete(self, name):
        """
        删除键值
        :return:
        """
        # 删除值(key也有close方法,可以用with结构)
        with win32api.RegOpenKeyEx(self.reg_root, self.reg_path, 0, self.reg_flags) as key:
            win32api.RegDeleteValue(key, name)

        # 删除键(需要获取其父键,通过父键删除子键)
        reg_parent, subkey_name = os.path.split(self.reg_path)
        with win32api.RegOpenKeyEx(self.reg_root, reg_parent, 0, self.reg_flags) as key:
            win32api.RegDeleteKeyEx(key, subkey_name)

    def set(self, k, value):
        """
        将某个键k的值设置为value
        :return:
        """
        win32api.RegSetValueEx(self.key, k, 0, win32con.REG_SZ, value)

    def set_default_value(self, value):
        """
        设置该项key的默认值
        :param value:
        :return:
        """
        win32api.RegSetValue(self.key, '', win32con.REG_SZ, value)

    def close(self):
        """
        关闭注册表
        :return:
        """
        win32api.RegCloseKey(self.key)

  

posted on 2018-12-07 17:50  曹植  阅读(456)  评论(0编辑  收藏  举报

导航