厉害了,Python也能操作注册表
点击上方“IT共享之家”,进行关注
回复“资料”可获赠Python学习福利
今
日
鸡
汤
多情只有春庭月,犹为离人照落花。
前言
大家好,我是IT共享者,人称皮皮。
注册表这个东西大家可能都不是很熟悉,因为我们平时用到的少;但是它是Windows的核心,很多软件的启动和日志记录什么的都包含在里面,可以说它是一个大型的数据库也不为过,今天我们就来看看Python是如何操作注册表的吧。
一、注册表初次见面
进入系统注册表的方法多种多样,最常见的就是运行窗口输入命令“regedit”,即可进入注册表:
注册表中的几个菜单分别对应机器的根目录登陆的用户信息和本地机器信息以及用户信息和本地配置信息等。
二、认识操作注册表的模块
在Python中就有这么一个神奇的模块,它可以用来操作注册表。它就是-----"winreg",一个Python自带的操作注册表的模块。
三、导入
import winreg
1.常量
”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结尾的字符串
四、注册表相关操作
1.连接远程计算机注册表
reg=winreg.ConnectRegistry('\\计算机名',winreg.HKEY_LOCAL_MACHINE)#返回值是所开打键的句柄
#第一个参数是指远程计算机名,第二个参数是指注册表中的键,如HKEY_LOCAL_MACHINE,它是winreg中的常量。
不过我们在这里要注意的是,如果远程注册表没有系统管理员权限,是无法正常访问注册表的。所以我们先要判断下它的访问权限。这里就要用到我们之前讲的"ctypes"模块中的判断用户是否是管理员用户的方法了。
import ctypes
import sys
def admin():aa=ctypes.windll.shell32.IsUserAnAdmin()return aaif admin()==1: #有管理员权限可打开远程注册表winreg.ConnectRegistry('\\计算机名',winreg.HKEY_LOCAL_MACHINE)
else:if sys.version_info[0]==3: #python版本是3以上的版本ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)else: #python2 版本ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
2.关闭连接注册表
连接之后我们不想用了,就要随手把它给关闭了,也很简单,只要拿到打开注册表的句柄,就可以关闭了。
winreg.CloseKey(reg)
可以看到句柄的值不一样。
其实还有一种方法,就是利用注册处理对象的方法来关闭。
reg.Close()
注册对象还支持上下文和分离处理对象周期:
reg.detach() #返回一个整数,记录当前对象的生命周期,如果关闭注册句柄对象,那么则为0
3.打开注册表键
#打开指定的键,返回一个处理对象
winreg.OpenKey(key, sub_key, reserved=0, access=winreg.KEY_READ)
winreg.OpenKeyEx(key, sub_key, reserved=0, access=winreg.KEY_READ)
#key:HKEY_ 常量
#sub_key:指定键的子键
#reserved:一个保留的证书,必须是零。默认值为零
#access:访问权限
4.创建新的注册表键
winreg.CreateKey(key,sub_key)
winreg.CreateKeyEx(key,sub_key,reserved=0,access=winreg.KEY_WRITE)
#key:HKEY_ 常量
#sub_key:指定键的子键
#reserved:一个保留的证书,必须是零。默认值为零
#access:访问权限
5.删除注册表中指定的键
winreg.DeleteKey( key,sub_key) #不能删除带有子项的键
winreg.DeleteKeyEx(key,sub_key,reserved=0,access=winreg.KEY_WOW64_64KEY)#不能删除带有子项的键
winreg.DeleteValue(key, value)#从某个注册键中删除一个命名值项
#用法与上面相同,只是结果是删除罢了
可以看到”cnm“已经被删除了。如果键不存在,删除会报错。
6.枚举注册表键
winreg.EnumKey(key,index) #枚举打开的注册表键的子键,并返回一个字符串
winreg.EnumValue(key,index)#枚举打开的注册表键值,并返回一个元组
#index:一个整数,用于标识所获取键的索引
7.刷新注册表键
winreg.FlushKey(key) #同步某个键的所有属性写入注册表
8.读取注册表
winreg.LoadKey(key,sub_key,file_name)
#file_name:读取注册表的数据的文件名
9.查找注册表键
winreg.QueryInfoKey(key) #返回一个3元素元组的键的信息
winreg.QueryValue(key,sub_key) #用一个字符串来检索一个键的值
winreg.QueryValueEx(key,value_name) #检索与开放权限的注册表键相关联的指定值的数据类型和名称
10.保存注册表键
winreg.SaveKey(key, file_name) #保存指定的键和所有指定文件的注册表子项
11.启用禁用注册表
winreg.DisableReflectionKey(key) #禁用
winreg.EnableReflectionKey(key) #启用
12.反射状态是否禁用
winreg.QueryReflectionKey(key) #结果为True 则表示禁用
13.在指定键上关联值
winreg.SetValue(key, sub_key, type, value) #添加键和值
winreg.SetValueEx(key,value_name,reserved,type,value)#将数据存储在一个开放的注册表键值字段
#value_name:该字符串名称的注册表子键
#type:值类型
#value:子键的键值
可以看出它们的区别,而且前者值类型只能指定为“winreg.REG_SZ”,而后者什么类型都可以。
14.寻找应用程序的位置并打开
前面我们介绍了"winreg"几乎所有的方法,现在我们就来具体做一个应用练练手,就拿我们的360安全卫士为例,我们尝试着通过注册表先找到它的位置然后打开它。那么接下来小编开始表演了:
1).定位360安全卫士的注册表项:
1)).打开系统注册表编辑器,然后进行搜索关键字:
2)).定位到注册表路径
2).打开注册表键
通过我们找到的子键然后对其进行查找操作,得到处理对象的句柄“reg”
reg=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\360安全卫士")
3).找到应用的绝对路径并打印
通过数值名称找到数值数据,
path=winreg.QueryValueEx(reg,'DisplayIcon')
这样就找到了这个应用的绝对路径了,返回值是一个元祖,我们使用索引访问:
path[0]
可以看到我们已经成功打印出了我们要找的应用程序的绝对路径了,接下来就可以愉快的打开它了。打开的方法多种多样,什么“os”,“subprocess”,"ctypes","pywin32",一大堆的方法,不过小编还是觉得“os”最方便。
os.popen(path[0])
最后别忘了关闭对象处理句柄哦。
#两种方法都可以关闭
winreg.CloseKey(reg)
reg.Close()
四、总结
利用”winreg“可以完成很多骚操作,你也可以通过注册表设置系统开机启动项以及其它操作,如果你想往黑客方面发展的话。
看完本文有收获?请转发分享给更多的人
IT共享之家
入群请在微信后台回复【入群】
------------------- End -------------------
往期精彩文章推荐:
一篇文章教会你创建vue项目和使用vue.js实现数据增删改查
一篇文章带你了解CSS clear both清除浮动
手把手教你用Javascript制作随机星星效果图
厉害了,Python也能操作注册表相关推荐
- 利用Python读取并操作注册表
利用Python读取并操作注册表 一.Python与注册表相关的库 winreg(主要) win32api 二.注册表结构:键.值 三.winreg--访问Windows注册表 1.模块功能: win ...
- Python模块——_winreg操作注册表
From: http://blog.sina.com.cn/s/blog_4b5039210100gmsb.html 用python操作修改windows注册表,显然要比用C或者C++简单. 主要参考 ...
- Python模块_winreg操作注册表
用python操作修改windows注册表,显然要比用C或者C++简单. 主要参考资料:官方文档:http://docs.python.org/library/_winreg.html 通过pytho ...
- 删除python的注册表_Python操作注册表详细步骤介绍
Python操作注册表步骤之1.打开注册表 对注册表进行操作前,必须打开注册表.在Python中,可以使用以下两个函数:RegOpenKey和RegOpenKeyEx.其函数原型分别如下所示. Reg ...
- python操作注册表能干啥_转 python操作注册表模块_winreg
分类: WINDOWS 基本概念: KEY 键 Value 值 函数和作用: CloseKey() - 关闭一个Key ConnectRegistry() - 链接到其他机器的注册表 CreateKe ...
- python访问注册表_Python 操作注册表
通过Python操作注册表有两种方式,第一种是通过Python的内置模块 _winreg:另一种方式就是Win32 Extension For Python 的win32api模块,但是需要进行额外的 ...
- 【python之操作注册表】Python删除注册表节点下的值
[python操作注册表]Python删除注册表节点下的值 背景 本来是别的平台的一个bug,以为自己去沟通然后让他们修就好了,结果又是这样别人的坑自己来填.主要是在卸载的时候要删除注册表下的所有节点 ...
- 怎么删除python3.7注册表内容_python3操作注册表的方法(Url protocol)
使用python操作注册表的方法最近学习了一下,现在做一下笔记,由于对Python语言的使用还不是很熟练,所以写不出高大上的结构,但是解决问题搓搓有余了. 说道注册表顺便也说一说环境变量的修改(放下下 ...
- C#操作注册表全攻略
相信每个人对注册表并不陌生,在运行里面输入"regedit"就可以打开注册表编辑器了.这东西对Windows系统来说可是比较重要的,也是病毒常常会光顾的地方,比如病毒和恶意软件常常 ...
最新文章
- 马斯克39页火星计划PPT曝光,我们能学到什么
- Instruments--CoreAnimation页面性能调试
- CentOS 6网络配置
- Android小项目源码汇总
- 区块链浏览器_区块链FBI——如何用区块链浏览器追踪链上数据
- java post webservice_[java.webservice] 如何通过HttpPost从服务器上获得一个sessionid
- EAT/IAT Hook
- 【Matlab】离散点拟合曲面
- 优酷股东变更 阿里通过全资子公司土豆继续持有优酷
- win11电脑上如何设置微信双开(打开两个微信)
- 晶闸管整流桥matlab仿真,整流12脉中频电源MATLAB-Simulink仿真及谐波分析
- 儿童护眼灯哪个品牌最好?儿童护眼灯十大排行榜
- 台式计算机网卡驱动不能正常使用,系统提示“您的网卡驱动程序不正常!”怎么办 是什么原因...
- 测试鼠标传感器的软件,鼠标该怎么选择?给大家说下鼠标传感器的差距
- 两年多的社招经验分享,我的跳槽经验总结(含阿里滴滴美团快手头条)
- 伯俊软件获得阿里云原生核心授牌伙伴认证,共建新生态
- 查询服务器硬盘上电时间,鲁大师检测硬盘通电时间怎么操作?检测硬盘通电时间教程...
- Ubuntu 中文字体设置备忘
- python—基础练习2
- 谈一谈对新技术的态度