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中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
windows下numpy下载与安装图文教程
Apr 02 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
Django中的静态文件管理过程解析
Aug 01 Python
Python动态声明变量赋值代码实例
Dec 30 Python
Python数组并集交集补集代码实例
Feb 18 Python
python实现横向拼接图片
Mar 23 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
python破解同事的压缩包密码
Oct 14 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 Python
Python一行代码实现自动发邮件功能
May 30 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
php 中文和编码判断代码
2010/05/16 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
Javascript 继承实现例子
2009/08/12 Javascript
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
params有什么用
2016/03/01 面试题
如何执行一个shell程序
2012/11/23 面试题
小学班级特色活动方案
2014/08/31 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
七一晚会主持词
2015/06/29 职场文书
如何在Python中创建二叉树
2021/03/30 Python