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编程中实现迭代器的一些技巧小结
Jun 21 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python机器学习之神经网络实现
Oct 13 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 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图片上传类带图片显示
2006/11/25 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP模块化安装教程
2016/06/01 PHP
php实现算术验证码功能
2018/12/05 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
javascript动态加载三
2012/08/22 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
Vue实现日历小插件
2019/06/26 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python通过poll实现异步IO的方法
2015/06/04 Python
python实现雨滴下落到地面效果
2018/06/21 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
python判断是空的实例分享
2020/07/06 Python
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
公司市场部岗位职责
2013/12/02 职场文书
简历自我评价怎么写好呢?
2014/01/04 职场文书
2015年三万活动总结
2015/03/25 职场文书
驾驶员管理制度范本
2015/08/06 职场文书