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生成pdf文件的方法
Aug 04 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
python字典的常用操作方法小结
May 16 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
flask框架视图函数用法示例
Jul 19 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
python检测服务器端口代码实例
Aug 31 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
python not运算符的实例用法
Jun 30 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会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php实现递归的三种基本方式
2020/07/04 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
python追加元素到列表的方法
2015/07/28 Python
python在不同层级目录import模块的方法
2016/01/31 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
老教师工作总结的自我评价
2013/09/27 职场文书
家长对孩子的评语
2014/04/18 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
实习生矿工检讨书
2014/10/13 职场文书
村主任当选感言
2015/08/01 职场文书
python中数组和列表的简单实例
2022/03/25 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技