操作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的Flask框架与数据库连接的教程
Apr 20 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Python探索之SocketServer详解
Oct 28 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
pycharm 安装JPype的教程
Aug 08 Python
Python笔记之观察者模式
Nov 20 Python
python获取array中指定元素的示例
Nov 26 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
Python小白不正确的使用类变量实例
May 29 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
Python实现字典的遍历与排序功能示例
2017/12/23 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python如何使用字符打印照片
2020/01/03 Python
python与mysql数据库交互的实现
2020/01/06 Python
Python通过Pillow实现图片对比
2020/04/29 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
怎样自定义一个异常类
2016/09/27 面试题
工商企业管理实习自我鉴定
2013/12/04 职场文书
领导的自我鉴定
2013/12/28 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
考研英语复习计划
2015/01/19 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS