pythons实战:python操作注册表的方法及应用

 在Windows操作系统中,注册表是一个重要的系统组件,它存储了系统和应用程序的配置信息。Python提供了winreg模块,可以用于操作Windows注册表。本文将介绍如何使用Python操作注册表,并介绍一些应用场景。

 

1. 导入winreg模块

在使用winreg模块之前,我们需要先导入该模块。可以使用以下代码导入winreg模块:

```python
import winreg
```

2. 打开注册表

可以使用winreg模块的OpenKey()方法打开注册表。该方法的参数是一个表示注册表项的句柄和一个表示要打开的子项的名称的字符串。如果要打开的子项不存在,将会抛出一个WindowsError异常。

下面是打开注册表的示例代码:

```python
import winreg

# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')
```

在上面的代码中,我们首先使用winreg.HKEY_CURRENT_USER常量表示HKEY_CURRENT_USER根键。然后使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。

3. 读取注册表值

可以使用winreg模块的QueryValue()方法读取注册表值。该方法的参数是一个表示注册表项的句柄和一个表示要读取的值的名称的字符串。如果要读取的值不存在,将会抛出一个WindowsError异常。

下面是读取注册表值的示例代码:

```python
import winreg

# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')

# 读取StartPage键的值
value = winreg.QueryValue(key, 'StartPage')
print(value)
```

在上面的代码中,我们首先使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。然后使用winreg.QueryValue()方法读取StartPage键的值,并将结果保存在变量value中。最后打印value的值。

4. 写入注册表值

可以使用winreg模块的SetValue()方法写入注册表值。该方法的参数是一个表示注册表项的句柄、一个表示要写入的值的名称的字符串和一个表示要写入的值的类型的常量。如果要写入的值已存在,将会覆盖原有的值。

下面是写入注册表值的示例代码:

```python
import winreg

# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer', 0, winreg.KEY_WRITE)

# 写入TestValue键的值
winreg.SetValue(key, 'TestValue', winreg.REG_SZ, 'Hello, World!')
```

在上面的代码中,我们首先使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。然后使用winreg.SetValue()方法写入TestValue键的值。需要注意的是,我们需要将要写入的值的类型作为winreg.SetValue()方法的第三个参数传入,并使用常量表示类型。

5. 关闭注册表

在操作注册表之后,我们需要关闭注册表。可以使用winreg模块的CloseKey()方法关闭注册表。该方法的参数是一个表示注册表项的句柄。

下面是关闭注册表的示例代码:

```python
import winreg

# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')

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

在上面的代码中,我们首先使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。然后使用winreg.CloseKey()方法关闭注册表。

6. 应用场景

Python操作注册表的应用场景很多,例如:

- 修改Windows系统设置,如修改桌面背景、修改默认浏览器等;
- 配置应用程序,如修改应用程序的默认设置;
- 读取系统信息,如读取系统启动时间、读取系统版本号等。

import _winreg
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
#获取该键的所有键值,因为没有方法可以获取键值的个数,所以只能用这种方法进行遍历
try:
    i=0
    while True:
        #EnumValue方法用来枚举键值,EnumKey用来枚举子键
        content = _winreg.EnumValue(key,i)
        i += 1
        print content
except WindowsError:
    pass

# 如果知道键的名称,也可以直接取值
value = _winreg.QueryValueEx(key,"ABC")
print value

#创建新的键
newkey = _winreg.CreateKey(key,"hello")

#给新创建的键添加页键值
_winreg.SetValueEx(newkey,"HelloNewKey",0,_winreg.REG_SZ,'this is new key content')

#将此脚本添加到注册表启动项
p = "C:\Users\Administrator\Desktop\main.py"
#在启动项中添加程序启动键值对 以及  页值
path = 'python "%s"' % p
print path
env = _winreg.OpenKeyEx(_winreg.HKEY_LOCAL_MACHINE,
                        "SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
                        0,
                        _winreg.KEY_SET_VALUE|_winreg.KEY_READ
                        )
print env

key = _winreg.EnumKey(env,0)#读取Run下面的第一个键
print key

value = _winreg.EnumValue(env,0)#枚举Run键  下面的第一个页值
print value
value = _winreg.EnumValue(env,1)#枚举Run键  下面的第二个页值
print value
value = _winreg.EnumValue(env,2)#枚举Run键  下面的第三个页值
print value
# value = _winreg.EnumValue(env,3)#枚举Run键  下面的第四个页值   不存在则报错
# print value

#遍历全部的页值如下
name_list = []
try:
    i = 0
    while True:
        name,value,type = _winreg.EnumValue(env,i)#枚举键下的页值
        name_list.append(name)
        i += 1
        print name
except WindowsError:
    pass

print name_list
if "Agent" not in name_list:
    _winreg.SetValueEx(env,"Agent",0,_winreg.REG_SZ,path)
else:
    value = _winreg.QueryValueEx(env,"Agent")


#判断是不是存在此键以及键的内容是否符合正常的
if "Agent" not in name_list:
    _winreg.SetValueEx(env,"Agent",0,_winreg.REG_SZ,path)

#获取子键的内容
value = _winreg.QueryValueEx(env,"Agent")
if value != path:
    _winreg.SetValueEx(env,"Agent",0,_winreg.REG_SZ,path) #如果存在此key  则会直接修改里面的value

总结

在Windows操作系统中,注册表是一个重要的系统组件,它存储了系统和应用程序的配置信息。Python提供了winreg模块,可以用于操作Windows注册表。可以使用winreg模块的OpenKey()方法打开注册表、使用QueryValue()方法读取注册表值、使用SetValue()方法写入注册表值和使用CloseKey()方法关闭注册表。Python操作注册表的应用场景很多,例如修改Windows系统设置、配置应用程序和读取系统信息等。


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

或者点击下方链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值