操作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框架中@app.route的用法教程
Mar 31 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
使用pdb模块调试Python程序实例
Jun 02 Python
Python 函数返回值的示例代码
Mar 11 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
python实现数字炸弹游戏
Jul 17 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
python3爬虫中多线程的优势总结
Nov 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
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python使用配置文件过程详解
2019/12/28 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
软件测试工程师笔试题带答案
2015/03/27 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
企事业单位求职者的自我评价
2013/12/28 职场文书
师德模范事迹材料
2014/06/03 职场文书
法人委托书
2014/07/31 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
工作保证书
2015/01/17 职场文书
工程部岗位职责
2015/02/10 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS