操作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 enumerate遍历数组示例应用
Sep 06 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
基于Python的图像阈值化分割(迭代法)
Nov 20 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学习资料汇总与网址
2007/03/16 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
实现获取http内容的php函数分享
2014/02/16 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
python 内置模块详解
2019/01/01 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
师范应届生求职信
2013/11/15 职场文书
保密工作责任书
2014/04/16 职场文书
搞笑爱情保证书
2014/04/29 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
自我推荐信格式模板
2015/03/24 职场文书
车间质检员岗位职责
2015/04/08 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
党支部半年考察意见
2015/06/01 职场文书
电视新闻稿
2015/07/17 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android