操作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的Tornado框架异步编程入门实例
Apr 24 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
python调用API实现智能回复机器人
Apr 10 Python
对PyTorch torch.stack的实例讲解
Jul 30 Python
python生成九宫格图片
Nov 19 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
Python unittest框架操作实例解析
Apr 13 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Python 多线程之threading 模块的使用
Apr 14 Python
pandas DataFrame.shift()函数的具体使用
May 24 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
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
php的4种常见运行方式
2015/03/20 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Django操作session 的方法
2020/03/09 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
微型企业创业投资计划书
2014/01/10 职场文书
教师校本培训方案
2014/02/26 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
小学德育工作总结2015
2015/05/12 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书