操作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 相关文章推荐
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
python pytest进阶之fixture详解
Jun 27 Python
numpy求平均值的维度设定的例子
Aug 24 Python
如何基于python生成list的所有的子集
Nov 11 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
详解Python自动化之文件自动化处理
Jun 21 Python
分享7个 Python 实战项目练习
Mar 03 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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/01/07 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
matplotlib绘制动画代码示例
2018/01/02 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
西式婚礼证婚词
2014/01/12 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
学校消防安全制度
2014/01/30 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
干部选拔任用方案
2014/05/26 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书