Python实现操纵控制windows注册表的方法分析


Posted in Python onMay 24, 2019

本文实例讲述了Python实现操纵控制windows注册表的方法。分享给大家供大家参考,具体如下:

使用_winreg模块的话

基本概念:

  • KEY 键
  • Value 值

函数和作用:

CloseKey() - 关闭一个Key
ConnectRegistry() - 链接到其他机器的注册表
CreateKey() - 创建一个Key
DeleteKey() - 删除一个Key
DeleteValue() - 删除一个Key里面的值(value)
EnumKey() - 为已经打开的Key里面的子键建立索引
EnumValue() - 为打开的键中的值建立索引
FlushKey() - 回写所有的键属性改变到注册表
LoadKey() - 从指定文件读入键信息
OpenKey() - 打开一个键
OpenKeyEx()
QueryValue() - 在注册表中检索一个键的路径
QueryValueEx() - 注册表中检索一个键的路径
QueryInfoKey() - 返回关于键的信息
SaveKey() - 保存键到文件
SetValue() - 设置一个键
SetValueEx() - 设置一个值

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")

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")

3、 访问远程注册表

#第二参数必须是HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等预先定义好的值,拿到返回的key后就可以进行操作了
key = _winreg.ConnectRegisty("IP地址或者机器名",_winreg.HKEY_CURRENT_USER)

4、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 相关文章推荐
Python日期操作学习笔记
Oct 07 Python
python创建临时文件夹的方法
Jul 06 Python
python相似模块用例
Mar 04 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python实现购物车功能的方法分析
Nov 10 Python
PyQt5每天必学之组合框
Apr 20 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
Python学习笔记之装饰器
Aug 06 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 #Python
Django框架中间件(Middleware)用法实例分析
May 24 #Python
python与字符编码问题
May 24 #Python
Python读取stdin方法实例
May 24 #Python
python实践项目之监控当前联网状态详情
May 23 #Python
了解不常见但是实用的Python技巧
May 23 #Python
python远程邮件控制电脑升级版
May 23 #Python
You might like
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
php中常用的预定义变量小结
2012/05/09 PHP
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
webpack优化的深入理解
2018/12/10 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
python链接Oracle数据库的方法
2015/06/28 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
python读写json文件的简单实现
2017/04/11 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python将视频转换为全字符视频
2019/04/26 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
英国家电直销:Appliances Direct
2016/09/22 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
实习教师自我鉴定
2013/09/27 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
委托函范文
2015/01/29 职场文书
大学生求职信怎么写
2015/03/19 职场文书
考研导师推荐信范文
2015/03/27 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python