前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python操作注册表

python操作注册表

作者头像
赵云龙龙
发布2020-05-19 21:51:00
3.5K0
发布2020-05-19 21:51:00
举报
文章被收录于专栏:python爱好部落

注册表是windows管理配置系统运行参数的一个核心数据库。在这个数据库里整合集成了全部系统和应用程序的初始化信息;其中包含了硬件设备的说明、相互关联的应用程序与文档文件、窗口显示方式、网络连接参数、甚至有关系到计算机安全的网络共享设置 。

1.读取

读取用的方法是OpenKey方法:打开特定的key

代码语言:python
代码运行次数:0
复制
winreg.OpenKey(key,sub_key,res=0,sam=KEY_READ)

例子:此例子是显示了本机网络配置的一些注册表项

代码语言:python
代码运行次数:0
复制
import winreg
key = winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{0E184877-D910-4877-B 4C2-04F487B6DBB7}")
#获取该键的所有键值,遍历枚举
try:
 i=0
 while 1:
  #EnumValue方法用来枚举键值,EnumKey用来枚举子键
  name,value,type = _winreg.EnumValue(key,i)
  print repr(name),value,type
  i+=1
except WindowsError:
 print 
#假如知道键名,也可以直接取值
value,type = _winreg.QueryValueEx(key,"DhcpDefaultGateway")
print "默认网关地址----",value,type

2.创建 修改注册表

创建key:_winreg.CreateKey(key,sub_key)

删除key: _winreg.DeleteKey(key,sub_key)

删除键值:_winreg.DeleteValue(key,value)

给新建的key赋值:_winreg.SetValue(key,sub_key,type,value)

例子:

代码语言:python
代码运行次数:0
复制
#!/usr/bin/env python
#coding=utf-8
import winreg
  
key=winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")
#删除键
_winreg.DeleteKey(key, "Advanced")
#删除键值
_winreg.DeleteValue(key, "IconUnderline")
#创建新的
newKey = _winreg.CreateKey(key,"MyNewkey")
 #给新创建的键添加键值
_winreg.SetValue(newKey,"ValueName",0,"ValueContent")

3. 权限问题 写完的Python脚本必须用管理员权限运行,才能对注册表进行写操作。否则会报PermissionError异常 这个时候需要调用Windows的API,重新启动一遍程序 runas administrator,将原来的程序退出。

代码也很简单

代码语言:python
代码运行次数:0
复制
from __future__ import print_function
import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False
if is_admin():
    # 将要运行的代码加到这里
else:
    if sys.version_info[0] == 3:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    else:#in python2.x
        ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

网上搜的都是python2的, 自己写代码的时候总是搞不正确的包, 然后用

代码语言:shell
复制
pip search winreg

结果是:

代码语言:javascript
复制
winreg-helpers (0.1.1)  - Helper functions for reading/writing to the Windows Registry.

装这个包就可以了。

解决问题,每次在链接vpn后,发现browser就打不开了,需要手动去将其去掉。 现在只要执行一下以下这个脚本,就解决了问题:

代码语言:python
代码运行次数:0
复制
import winreg

INTERNET_SETTINGS = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
    r'Software\Microsoft\Windows\CurrentVersion\Internet Settings',
    0, winreg.KEY_ALL_ACCESS)

def set_key(name, value):
    _, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, name)
    winreg.SetValueEx(INTERNET_SETTINGS, name, 0, reg_type, value)

set_key('ProxyEnable', 0)
#set_key('ProxyOverride', u'*.local;<local>')  # Bypass the proxy for localhost
#set_key('ProxyServer', u'X.X.X.X:8080')

测试一下,通过。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档