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 相关文章推荐
Django如何实现内容缓存示例详解
Sep 24 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
Selenium的使用详解
Oct 19 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
浅谈Python爬虫基本套路
Mar 25 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
python3字符串操作总结
Jul 24 Python
wxpython布局的实现方法
Nov 01 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python3读取文件指定行的三种方法
May 24 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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 MySQL与分页效率
2008/06/04 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
XML的代替者----JSON
2007/07/21 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
python爬取代理ip的示例
2020/12/18 Python
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
副厂长岗位职责
2014/02/02 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
体育部部长竞选稿
2015/11/21 职场文书
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技