操作Windows注册表的简单的Python程序制作教程


Posted in Python onApril 07, 2015

通过Python操作注册表有两种方式,第一种是通过Python的内置模块 _winreg;另一种方式就是Win32 Extension For Python 的win32api模块,但是需要进行额外的安装。这里主要给出一些_winreg和win32api的Demo代码。

 

1、 _winrg

可以参考官方的参考文档:

http://docs.python.org/library/_winreg.html

http://www.python.org/doc/2.6.2/library/_winreg.html

 

1.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")

1.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")

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

2、 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编程开发之类型转换convert实例分析
Nov 13 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
基于django传递数据到后端的例子
Aug 16 Python
Django项目中使用JWT的实现代码
Nov 04 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
编写简单的Python程序来判断文本的语种
Apr 07 #Python
Python实现在线程里运行scrapy的方法
Apr 07 #Python
Python实现从脚本里运行scrapy的方法
Apr 07 #Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 #Python
Python中用memcached来减少数据库查询次数的教程
Apr 07 #Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 #Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 #Python
You might like
php显示时间常用方法小结
2015/06/05 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
关于vue面试题汇总
2018/03/20 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python文件处理
2016/02/29 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
如何用PHP实现邮件发送
2012/12/26 面试题
英语专业毕业生自我鉴定
2013/11/09 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
美术专业个人自我评价
2014/01/18 职场文书
法定代表人授权委托书
2014/09/19 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
基于redis+lua进行限流的方法
2022/07/23 Redis