利用Python读取并操作注册表

利用Python读取并操作注册表

一、Python与注册表相关的库
winreg(主要) win32api
二、注册表结构:键、值
三、winreg——访问Windows注册表

1.模块功能:
winreg.closeKey(hkey)
关闭以前打开的注册表项。在HKEY参数指定以前打开的关键。
注意:如果使用此方法(或通过)未关闭hkeyhkey.Close(),则在Python销毁hkey对象时将关闭hkey。
winreg.ConnectRegistry(computer_name,key)
建立与另一台计算机上的预定义注册表句柄的连接,并返回一个句柄对象。
computer_name是表单的远程计算机的名称 r"\computername"。如果None使用本地计算机。
key是要连接的预定义句柄。
返回值是已打开键的句柄。如果函数失败, OSError则引发异常。
winreg.CreateKey(key,sub_key)
创建或打开指定的键,返回一个句柄对象。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个字符串,用于命名此方法打开或创建的键。
如果key是预定义键之一,则sub_key可以是None。在这种情况下,返回的句柄是传递给函数的相同键句柄。
如果密钥已存在,则此函数将打开现有密钥。
返回值是已打开键的句柄。如果函数失败, OSError则引发异常。
winreg.CreateKeyEx(key,sub_key,reserved = 0,access = KEY_WRITE )
创建或打开指定的键,返回一个 句柄对象。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个字符串,用于命名此方法打开或创建的键。
reserved是保留的整数,必须为零。默认值为零。
access是一个整数,指定一个访问掩码,用于描述密钥的所需安全访问。默认是KEY_WRITE。请参阅 其他允许值的访问权限。
如果key是预定义键之一,则sub_key可以是None。在这种情况下,返回的句柄是传递给函数的相同键句柄。
如果密钥已存在,则此函数将打开现有密钥。
返回值是已打开键的句柄。如果函数失败, OSError则引发异常。
winreg.DeleteKey(key,sub_key )
删除指定的密钥。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个字符串,必须是key 参数标识的键的子键。该值不能是None,键可能没有子键。
此方法无法使用子键删除键。
如果方法成功,则删除整个键,包括其所有值。如果方法失败,OSError则会引发异常。
winreg.DeleteKeyEx(key,sub_key,access = KEY_WOW64_64KEY,reserved = 0 )
删除指定的密钥。
注意:该DeleteKeyEx()函数使用RegDeleteKeyEx Windows API函数实现,该函数特定于64位版本的Windows。请参阅RegDeleteKeyEx文档。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个字符串,必须是key参数标识的键的子 键。该值不能是None,键可能没有子键。
reserved是保留的整数,必须为零。默认值为零。
access是一个整数,指定一个访问掩码,用于描述密钥的所需安全访问。默认是KEY_WOW64_64KEY。请参阅其他允许值的访问权限。
此方法无法使用子键删除键。
如果方法成功,则删除整个键,包括其所有值。如果方法失败,OSError则会引发异常。
在不受支持的Windows版本上,NotImplementedError引发了。
winreg.DeleteValue(键,值)
从注册表项中删除命名值。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
value是一个标识要删除的值的字符串。
winreg.EnumKey(键,索引)
枚举打开的注册表项的子项,返回一个字符串。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
index是一个整数,用于标识要检索的键的索引。
该函数每次调用时都会检索一个子项的名称。通常会重复调用它,直到引发OSError异常,表明没有更多值可用。
winreg.EnumValue(键,索引)
枚举打开的注册表项的值,返回元组。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
index是一个整数,用于标识要检索的值的索引。
该函数每次调用时都会检索一个子项的名称。通常会重复调用它,直到引发OSError异常,表示不再有值。
结果是3项的元组:
指数 含义
0 标识值名称的字符串
1 保存值数据的对象,其类型取决于基础注册表类型
2 一个标识值数据类型的整数

winreg.ExpandEnvironmentStrings(str )
%NAME%在字符串中扩展环境变量占位符,例如 REG_EXPAND_SZ:

winreg.FlushKey(关键)
将密钥的所有属性写入注册表。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
没有必要致电FlushKey()更改密钥。注册表使用其惰性刷新器将注册表更改刷新到磁盘。注册表更改也会在系统关闭时刷新到磁盘。与此不同CloseKey(),该 FlushKey()方法仅在所有数据都已写入注册表时返回。只有FlushKey()在绝对确定注册表更改在磁盘上时,应用程序才应调用。
注意:如果不知道是否需要FlushKey()呼叫,则可能不是。
winreg.LoadKey(key,sub_key,file_name )
在指定的键下创建一个子键,并将指定文件中的注册信息存储到该子项中。
key是由ConnectRegistry()常量HKEY_USERS或其中一个返回的句柄HKEY_LOCAL_MACHINE。
sub_key是一个标识要加载的子项的字符串。
file_name是要从中加载注册表数据的文件的名称。必须使用该SaveKey()函数创建此文件。在文件分配表(FAT)文件系统下,文件名可能没有扩展名。
要在通话LoadKey()如果调用进程没有失败 SE_RESTORE_PRIVILEGE的特权。请注意,权限与权限不同 - 有关详细信息,请参阅RegLoadKey文档。
如果key是返回的句柄ConnectRegistry(),则file_name中指定的路径相对于远程计算机。
winreg.OpenKey(key,sub_key,reserved = 0,access = KEY_READ )
winreg.OpenKeyEx(key,sub_key,reserved = 0,access = KEY_READ )
打开指定的键,返回一个句柄对象。

key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个标识要打开的sub_key的字符串。
reserved是保留的整数,必须为零。默认值为零。
access是一个整数,指定一个访问掩码,用于描述密钥的所需安全访问。默认是KEY_READ。
结果是指定键的新句柄。
如果函数失败,OSError则引发。
winreg.QueryInfoKey(关键)
返回有关键的信息,作为元组。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
结果是3项的元组:
指数 含义
0 一个整数,给出该键具有的子键数。
1 一个整数,给出该键具有的值的数量。
2 上次修改密钥(如果可用)时的整数,自1601年1月1日起为100纳秒。

winreg.QueryValue(key,sub_key )
以字符串形式检索键的未命名值。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个字符串,其中包含与其关联的子键的名称。如果此参数为None或为空,则该函数将检索由SetValue()key标识的键的方法设置的值。
注册表中的值包含名称,类型和数据组件。此方法检索键的第一个具有NULL名称的值的数据。但是底层API调用不会返回类型,因此QueryValueEx()请尽可能使用 。
winreg.QueryValueEx(key,value_name )
检索与打开的注册表项关联的指定值名称的类型和数据。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
value_name是一个字符串,指示要查询的值。
结果是2项的元组:
指数 含义
0 注册表项的值。
1 给出此值的注册表类型的整数(请参阅docs中的表 SetValueEx())

winreg.SaveKey(key,file_name )
将指定的键及其所有子键保存到指定的文件中。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
file_name是要将注册表数据保存到的文件的名称。此文件尚不存在。如果此文件名包含扩展名,则不能通过该方法在文件分配表(FAT)文件系统上使用它LoadKey() 。
如果key表示远程计算机上的密钥,则file_name描述的路径 相对于远程计算机。此方法的调用者必须具有SeBackupPrivilege安全权限。请注意,权限与权限不同 - 有关详细信息,请参阅“ 用户权限和权限之间的 冲突”文档。
此函数将security_attributes的 NULL传递给API。
winreg.SetValue(key,sub_key,type,value )
将值与指定键关联。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
sub_key是一个字符串,用于命名与其关联的子键。
type是一个整数,指定数据的类型。目前必须这样 REG_SZ,意味着只支持字符串。使用该SetValueEx() 功能支持其他数据类型。
value是一个指定新值的字符串。
如果sub_key参数指定的键不存在,则SetValue函数会创建它。
值长度受可用内存的限制。应将长值(超过2048个字节)存储为文件名,文件名存储在配置注册表中。这有助于注册表有效地执行。
必须已通过访问权限打开由key参数 标识的密钥KEY_SET_VALUE。
winreg.SetValueEx(key,value_name,reserved,type,value )
将数据存储在打开的注册表项的值字段中。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
value_name是一个字符串,用于命名与该值关联的子项。
保留可以是任何内容 - 零始终传递给API。
type是一个整数,指定数据的类型。有关可用类型,请参阅 值类型。
value是一个指定新值的字符串。
此方法还可以为指定的键设置其他值和类型信息。必须已通过KEY_SET_VALUE访问权限打开由key参数标识的密钥 。
要打开密钥,请使用CreateKey()或OpenKey()方法。
值长度受可用内存的限制。应将长值(超过2048个字节)存储为文件名,文件名存储在配置注册表中。这有助于注册表有效地执行。
winreg.DisableReflectionKey(关键)
禁用在64位操作系统上运行的32位进程的注册表反射。
key是一个已经打开的键,或者是一个预定义的HKEY_ *常量。
NotImplementedError如果在32位操作系统上执行,通常会提高。
如果该键不在反射列表中,则该函数成功但无效。禁用键的反射不会影响任何子键的反射。
winreg.EnableReflectionKey(关键)
恢复指定的禁用密钥的注册表反射。
key是一个已经打开的键,或者是一个预定义的HKEY_ *常量。
NotImplementedError如果在32位操作系统上执行,通常会提高。
恢复键的反射不会影响任何子键的反射。
winreg.QueryReflectionKey(关键)
确定指定键的反射状态。
key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量。
True如果禁用反射则返回。
NotImplementedError如果在32位操作系统上执行,通常会提高。
2.常数
定义了以下常量以用于许多_winreg函数。
HKEY_ *常数
winreg.HKEY_CLASSES_ROOT
从属于此键的注册表项定义文档的类型(或类)以及与这些类型关联的属性。Shell和COM应用程序使用此密钥下存储的信息。
winreg.HKEY_CURRENT_USER
从属于此键的注册表项定义当前用户的首选项。这些首选项包括环境变量的设置,有关程序组的数据,颜色,打印机,网络连接和应用程序首选项。
winreg.HKEY_LOCAL_MACHINE
从属于此键的注册表项定义计算机的物理状态,包括有关总线类型,系统内存以及已安装的硬件和软件的数据。
winreg.HKEY_USERS
从属于此键的注册表项定义本地计算机上新用户的默认用户配置和当前用户的用户配置。
winreg.HKEY_PERFORMANCE_DATA
从属于此密钥的注册表项允许您访问性能数据。数据实际上并未存储在注册表中; 注册表函数使系统从其源收集数据。
winreg.HKEY_CURRENT_CONFIG
包含有关本地计算机系统的当前硬件配置文件的信息。
winreg.HKEY_DYN_DATA
在98之后的Windows版本中不使用此密钥。
winreg.KEY_QUERY_VALUE
查询注册表项的值所必需的。
注册表值类型可查阅:
https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/registry-value-types
winreg.KEY_SET_VALUE
创建,删除或设置注册表值所必需的。
winreg.KEY_CREATE_SUB_KEY
创建注册表项的子项时需要。
winreg.KEY_ENUMERATE_SUB_KEYS
枚举注册表项的子项所必需的。
winreg.KEY_NOTIFY
需要请求注册表项或注册表项的子项的更改通知。
winreg.KEY_CREATE_LINK
保留供系统使用。
winreg.KEY_WOW64_64KEY
表示64位Windows上的应用程序应在64位注册表视图上运行。
winreg.KEY_WOW64_32KEY
表示64位Windows上的应用程序应在32位注册表视图上运行。
winreg.REG_BINARY
任何形式的二进制数据。
winreg.REG_DWORD
32位数。
winreg.REG_DWORD_LITTLE_ENDIAN
小端格式的32位数字。相当于REG_DWORD。
winreg.REG_DWORD_BIG_ENDIAN
大端格式的32位数字。
winreg.REG_EXPAND_SZ
以空值终止的字符串,包含对环境变量的引用(%PATH%)。
winreg.REG_LINK
Unicode符号链接。
winreg.REG_MULTI_SZ
一系列以null结尾的字符串,以两个空字符结尾。(Python自动处理此终止。)
winreg.REG_NONE
没有定义的值类型。
winreg.REG_QWORD
一个64位的数字。
winreg.REG_QWORD_LITTLE_ENDIAN
小端格式的64位数字。相当于REG_QWORD。
winreg.REG_RESOURCE_LIST
设备驱动程序资源列表。
winreg.REG_FULL_RESOURCE_DESCRIPTOR
硬件设置。
winreg.REG_RESOURCE_REQUIREMENTS_LIST
硬件资源列表。
winreg.REG_SZ
以null结尾的字符串。
3.注册表处理对象
此对象包装Windows HKEY对象,在对象被销毁时自动关闭它。为了保证清理,可以调用 Close()对象上的方法或CloseKey()函数。
此模块中的所有注册表函数都返回其中一个对象。
此模块中接受句柄对象的所有注册表函数也接受整数,但是,鼓励使用句柄对象。
句柄对象提供语义__bool__()- 因此

Yes如果句柄当前有效(尚未关闭或分离),将输出。
该对象还支持比较语义,因此如果它们都引用相同的基础Windows句柄值,则句柄对象将比较true。
句柄对象可以转换为整数(例如,使用内置 int()函数),在这种情况下,返回基础Windows句柄值。您还可以使用该Detach()方法返回整数句柄,还可以断开Windows句柄与句柄对象的连接。
PyHKEY.Close()
关闭基础Windows句柄。
如果句柄已经关闭,则不会引发错误。
PyHKEY.Detach()
从句柄对象中分离Windows句柄。
结果是一个整数,它在分离之前保存句柄的值。如果手柄已经分离或关闭,则返回零。
调用此函数后,句柄实际上无效,但句柄未关闭。当您需要在句柄对象的生命周期之外存在基础Win32句柄时,可以调用此函数。
PyHKEY.enter()
PyHKEY.exit(* exc_info )
HKEY对象实现__enter__()并 exit()因此支持该with语句的上下文协议 :

当控件离开块时,将自动关闭键with。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章