操作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数组条件过滤filter函数使用示例
Jul 22 Python
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
windows下python和pip安装教程
May 25 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
python一键去抖音视频水印工具
Sep 14 Python
python add_argument()用法解析
Jan 29 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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语法(4)
2006/10/09 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
禁止js文件缓存的代码
2010/04/09 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python中subprocess批量执行linux命令
2018/04/27 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
土木工程师岗位职责
2013/11/24 职场文书
酒店保安员岗位职责
2014/01/31 职场文书