操作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去掉字符串中空格的方法
Mar 11 Python
Python素数检测的方法
May 11 Python
详细介绍Python的鸭子类型
Sep 12 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Python PyCharm如何进行断点调试
Jul 05 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 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模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
python如何删除列为空的行
2020/07/17 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
个人授权委托书
2014/04/03 职场文书
班长竞选演讲稿
2014/04/24 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
诉讼和解协议书
2016/03/23 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android