Python实现对Windows注册表的增删改查

首先我们需要安装winreg库

pip install winreg

注册表常量

”winreg“总有很多有用的方法,基本上就是操作注册表中的键值,我们挑几个重要的来说说。首先我们来了解下”winreg“中的各个常量:

1.HKEY_ 常量
winreg.HKEY_CLASSES_ROOT     #存储应用和shell的信息
winreg.HKEY_CURRENT_USER     #当前用户自定义的信息
winreg.HKEY_LOCAL_MACHINE    #计算机系统所有的信息
winreg.HKEY_USERS            #所有用户信息
winreg.HKEY_PERFORMANCE_DATA #性能数据
winreg.HKEY_CURRENT_CONFIG   #本地计算机系统的硬件配置文件
winreg.HKEY_DYN_DATA         #windows98后的版本无法使用
2.访问权限
winreg.KEY_ALL_ACCESS           #所有权限
winreg.KEY_WRITE                #可写
winreg.KEY_READ                 #可读
winreg.KEY_EXECUTE              #可执行相当于KEY_READ
winreg.KEY_QUERY_VALUE          #查询注册表键值
winreg.KEY_SET_VALUE            #创建、删除或设置一组注册表值
winreg.KEY_CREATE_SUB_KEY       #创建一个注册表子项的注册表键
winreg.KEY_ENUMERATE_SUB_KEYS   #枚举注册表子项所需的注册表键
winreg.KEY_NOTIFY               #修改注册表键时的提示
winreg.KEY_CREATE_LINK          #创建一个链接,预留给系统用
3.64位的具体应用
winreg.KEY_WOW64_64KEY  #在64位Windows应用程序应该运行在64位注册表视图
winreg.KEY_WOW64_32KEY  #在64位Windows应用程序应该运行在32位注册表视图
4.值类型
winreg.REG_BINARY                  #任何形式的二进制数据
winreg.REG_DWORD                   #32位的数
winreg.REG_DWORD_LITTLE_ENDIAN     #32位的数字在低位优先的格式,相当于REG_DWORD
winreg.REG_DWORD_BIG_ENDIAN        #32位的数字在高位优先的格式
winreg.REG_EXPAND_SZ               #以null结尾的字符串包含环境变量的引用(% %)
winreg.REG_LINK                    #Unicode符号链接
winreg.REG_MULTI_SZ                #一个以null结尾的字符串序列,由两个空字符结束
winreg.REG_NONE                    #没有定义的值类型
winreg.REG_QWORD                   #64位的数
winreg.REG_QWORD_LITTLE_ENDIAN         #在低位优先一个64位的数字格式,相当于REG_QWORD
winreg.REG_RESOURCE_LIST               #设备驱动器资源列表
winreg.REG_FULL_RESOURCE_DESCRIPTOR    #硬件设置
winreg.REG_RESOURCE_REQUIREMENTS_LIST  #硬件资源列表
winreg.REG_SZ                          #一个以null结尾的字符串

使用Python读取注册表一个目录下的所有键值对

import winreg

def read_registry_subkeys(hive, subkey):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)

        # 枚举子项
        subkeys = []
        index = 0
        while True:
            try:
                subkey_name = winreg.EnumKey(key, index)
                subkeys.append(subkey_name)
                index += 1
            except OSError:
                break

        # 关闭注册表项
        winreg.CloseKey(key)

        return subkeys
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error reading registry subkeys: {e}")

def read_registry_values(hive, subkey):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)

        # 枚举键值对
        values = {}
        index = 0
        while True:
            try:
                value_name, value_data, value_type = winreg.EnumValue(key, index)
                values[value_name] = (value_data, value_type)
                index += 1
            except OSError:
                break

        # 关闭注册表项
        winreg.CloseKey(key)

        return values
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error reading registry values: {e}")

# 示例
hive = winreg.HKEY_LOCAL_MACHINE

# 使用列表罗列一下需要检查的服务
MyService = ["CET_SysDaemonService", "CET_PecSentryService", "CET_PecHealthService"]
# 非递归遍历列表
for myService in MyService:
    try:
        subkey = rf"SYSTEM\CurrentControlSet\Services\{myService}"
        subkeys = read_registry_values(hive, subkey)
        print(f"Subkeys under {subkey}: {subkeys}")
        print(subkeys['ImagePath'][0])
    except TypeError:
        print(f"Registry key not found: {subkey}")
# 递归遍历列表
for subkey_name in subkeys:
    full_subkey = f"{subkey}\\{subkey_name}"
    values = read_registry_values(hive, full_subkey)
    print(f"Values under {full_subkey}: {values}")

设置已存在注册表项的键值对

import winreg

def set_registry_value(hive, subkey, name, value, value_type):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)

        # 设置键值对
        winreg.SetValueEx(key, name, 0, value_type, value)

        # 关闭注册表项
        winreg.CloseKey(key)
        print(f"Registry value {name} set successfully.")
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error setting registry value: {e}")

# # 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARE\CET"
name = "PecCore " #ExampleValue
value = "NewValue"
value_type = winreg.REG_SZ

set_registry_value(hive, subkey, name, value, value_type)

创建注册表项以及键值对

import winreg

def Edit_Reg(key_path,value_name,value_data):
    # 创建或打开注册表项
    key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, key_path)
    winreg.SetValueEx(key, value_name, 0, winreg.REG_SZ, value_data)
    # 关闭注册表项
    winreg.CloseKey(key)


key_path = r"Software\CET\PecCore"  # 替换为你的注册表路径
# 设置或修改键值
value_name = "Version"
value_data = "1.0"
Edit_Reg(key_path,value_name,value_data)

删除键值对

import winreg

def delete_registry_value(hive, subkey, name):
    try:
        # 打开注册表项
        key = winreg.CreateKey(hive, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)

        # 检查值是否存在
        try:
            winreg.QueryValueEx(key, name)
        except FileNotFoundError:
            print(f"Registry value {name} not found.")
            return

        # 删除键值对
        winreg.DeleteValue(key, name)

        # 关闭注册表项
        winreg.CloseKey(key)
        print(f"Registry value {name} deleted successfully.")
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error deleting registry value: {e}")

# 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARE\CET\PecStar_4.0"
name = "Version"

删除目录

import winreg

def delete_registry_value(hive, subkey):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)
        # 删除注册表项
        winreg.DeleteKey(hive, subkey)
        # 关闭注册表项
        winreg.CloseKey(key)
        print(f"Registry value deleted successfully.")
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error deleting registry value: {e}")

# 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARE\CET\PecStar_4.0"
delete_registry_value(hive, subkey)
  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python对数据库进行增删改查需要使用数据库相关的库,如MySQLdb、pymysql、sqlite3等。下面以sqlite3为例,介绍Python对数据库进行增删改查的基本操作方法。 1. 连接数据库 ```python import sqlite3 # 连接到数据库,如果不存在则创建 conn = sqlite3.connect('test.db') print("Opened database successfully") ``` 2. 创建数据表 ```python # 创建表 conn.execute('''CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);''') print("Table created successfully") ``` 3. 插入数据 ```python # 插入数据 conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (1, 'Paul', 32, 'California', 20000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (2, 'Allen', 25, 'Texas', 15000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00 )") conn.commit() print("Records created successfully") ``` 4. 查询数据 ```python # 查询数据 cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print("ID = ", row[0]) print("NAME = ", row[1]) print("ADDRESS = ", row[2]) print("SALARY = ", row[3], "\n") ``` 5. 更新数据 ```python # 更新数据 conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1") conn.commit() print("Total number of rows updated :", conn.total_changes) ``` 6. 删除数据 ```python # 删除数据 conn.execute("DELETE from COMPANY where ID = 2;") conn.commit() print("Total number of rows deleted :", conn.total_changes) ``` 7. 关闭数据库连接 ```python # 关闭数据库连接 conn.close() ``` 完整的Python对数据库进行增删改查的示例代码: ```python import sqlite3 # 连接到数据库,如果不存在则创建 conn = sqlite3.connect('test.db') print("Opened database successfully") # 创建表 conn.execute('''CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);''') print("Table created successfully") # 插入数据 conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (1, 'Paul', 32, 'California', 20000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (2, 'Allen', 25, 'Texas', 15000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00 )") conn.commit() print("Records created successfully") # 查询数据 cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print("ID = ", row[0]) print("NAME = ", row[1]) print("ADDRESS = ", row[2]) print("SALARY = ", row[3], "\n") # 更新数据 conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1") conn.commit() print("Total number of rows updated :", conn.total_changes) # 删除数据 conn.execute("DELETE from COMPANY where ID = 2;") conn.commit() print("Total number of rows deleted :", conn.total_changes) # 关闭数据库连接 conn.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值