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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
对于Python中线程问题的简单讲解
Apr 03 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
简述Python2与Python3的不同点
Jan 21 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
Python持续监听文件变化代码实例
Jul 22 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
python图片合成的示例
Nov 09 Python
详解Django的MVT设计模式
Apr 29 Python
Python之matplotlib绘制饼图
Apr 13 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
基于php无限分类的深入理解
2013/06/02 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
不可错过的十本Python好书
2017/07/06 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
深入浅析python with语句简介
2018/04/11 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
python中subplot大小的设置步骤
2021/06/28 Python