操作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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
python中实现定制类的特殊方法总结
Sep 28 Python
python魔法方法-属性访问控制详解
Jul 25 Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
Python文件操作基本流程代码实例
Dec 11 Python
Django Rest framework之认证的实现代码
Dec 17 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
详解python3类型注释annotations实用案例
Jan 20 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 随机生成10位字符代码
2009/03/26 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
js的with语句使用方法
2007/09/21 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python中用altzone()方法处理时区的教程
2015/05/22 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python中pow函数用法及功能说明
2020/12/04 Python
二年级数学教学反思
2014/01/21 职场文书
简历的自我评价
2014/02/03 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
2014春晚主持词
2014/03/25 职场文书
公司请假条范文
2014/04/11 职场文书
创先争优一句话承诺
2014/05/29 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
教师聘用意向书
2015/05/11 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle