Python实现操纵控制windows注册表的方法分析


Posted in Python onMay 24, 2019

本文实例讲述了Python实现操纵控制windows注册表的方法。分享给大家供大家参考,具体如下:

使用_winreg模块的话

基本概念:

  • KEY 键
  • Value 值

函数和作用:

CloseKey() - 关闭一个Key
ConnectRegistry() - 链接到其他机器的注册表
CreateKey() - 创建一个Key
DeleteKey() - 删除一个Key
DeleteValue() - 删除一个Key里面的值(value)
EnumKey() - 为已经打开的Key里面的子键建立索引
EnumValue() - 为打开的键中的值建立索引
FlushKey() - 回写所有的键属性改变到注册表
LoadKey() - 从指定文件读入键信息
OpenKey() - 打开一个键
OpenKeyEx()
QueryValue() - 在注册表中检索一个键的路径
QueryValueEx() - 注册表中检索一个键的路径
QueryInfoKey() - 返回关于键的信息
SaveKey() - 保存键到文件
SetValue() - 设置一个键
SetValueEx() - 设置一个值

1、读取

import _winreg
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")
 #获取该键的所有键值,因为没有方法可以获取键值的个数,所以只能用这种方法进行遍历
 try:
  i = 0
while1:
#EnumValue方法用来枚举键值,EnumKey用来枚举子键
     name, value, type = _winreg.EnumValue(key, i)
print repr(name),
    i +=1
 except WindowsError:
print
 #如果知道键的名称,也可以直接取值
 value, type = _winreg.QueryValueEx(key, "EnableAutoTray")

2 、创建、修改

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、 访问远程注册表

#第二参数必须是HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等预先定义好的值,拿到返回的key后就可以进行操作了
key = _winreg.ConnectRegisty("IP地址或者机器名",_winreg.HKEY_CURRENT_USER)

4、win32api

win32api 和 _winreg 的方法很类似,一般是多了一个前缀”Reg”,使用方法很基本上一样,这里就不给具体的Demo代码了。

就一般的应用来说,使用_winreg就足够了,但是_winreg有一个问题,如果Python是32位的,并且是运行在64位的操作系统上时就会有一点小问题,由于操作系统会进行注册表的重定向,32位的程序无法访问64位应用程序的注册表。在Python2.6以前这个问题都没有解决,在Python2.7中通过补丁的形式修正了这个问题(http://bugs.python.org/issue7347)。

通过例子来说明一下这个问题,假设我们的操作系统是64位的,然后在上面安装了32位的Python,看如下的Python代码:

import _winreg
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"Software\Microsoft\Windows")
newKey = _winreg.CreateKey(key,"MyNewkey")

上面的代码的执行不会像预想那样创建如下的键:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows

而是会创建如下的键:

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows

因为在64位的windows操作系统下,64位的程序和32位程序的注册表是分开的,32位应用程序对注册表的操作(读、写)都会被重定向到Wow6432Node下面, 64位应用程序的访问注册表的行为则没有变化。因此如果我们的32位应用程序确实要访问64位程序所用到的注册表的话,就会有点问题。由于_winreg本身的问题,它对这种情况的支持不太充分,对windows api的封装有一些bug,这个时候就需要用到 win32api 模块。

下面用win32api提供的方法来修改上面的代码如下:

import win32api
import win32con
key = win32api.RegCreateKeyEx(win32con.HKEY_LOCAL_MACHINE, r"Software\Microsoft\Windows", win32con.WRITE_OWNER |win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx (key,"MyNewkey", 0, win32con.REG_SZ, keyValue)

上面的win32con.KEY_WOW64_64KEY意思就是直接访问64位注册表,不要进行重定向,默认的参数是win32con.KEY_WOW64_32KEY。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 命令行参数sys.argv
Sep 06 Python
python 多线程应用介绍
Dec 19 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Python hashlib模块用法实例分析
Jun 12 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
python中嵌套函数的实操步骤
Feb 27 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
python实现udp传输图片功能
Mar 20 Python
解决echarts中饼图标签重叠的问题
May 16 Python
如何表示python中的相对路径
Jul 08 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 #Python
Django框架中间件(Middleware)用法实例分析
May 24 #Python
python与字符编码问题
May 24 #Python
Python读取stdin方法实例
May 24 #Python
python实践项目之监控当前联网状态详情
May 23 #Python
了解不常见但是实用的Python技巧
May 23 #Python
python远程邮件控制电脑升级版
May 23 #Python
You might like
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Python魔术方法专题
2020/06/19 Python
印尼旅游网站:via
2017/11/12 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
寄语十八大感言
2014/02/07 职场文书
会走路的树教学反思
2014/02/20 职场文书
创建青年文明号材料
2014/05/09 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
心得体会格式及范文
2016/01/25 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle