You are here:  Home » Python » winreg- Windows注册表访问 – MS Windows特定服务(Python教程)(参考资料)

winregWindows注册表访问


这些函数将Windows注册表API公开给Python。而不是使用aninteger作为注册表句柄句柄对象用于确保句柄正确关闭,即使程序员忽略明确关闭它们.

更改在版本3.3:这个模块中的几个函数用于引发WindowsError,现在是OSError.

 

别名

这个模块提供以下内容functions:

winreg.CloseKeyhkey
关闭以前打开的注册表项。hkey参数指定一个以前打开的键.

注意

如果hkey没有用这种方法关闭(或通过hkey.Close()),当hkey对象被Python破坏时它被关闭

winreg.ConnectRegistry//(computer_name, key)
在另一台计算机上建立与预定义注册表句柄的连接,并返回a 句柄对象.

computer_name是远程计算机的名称,格式为r"\\computername"。如果None,则使用本地计算机.

key是连接的预定义句柄.

返回值是已打开键的句柄。如果函数失败,则会引发OSError异常.

更改版本3.3:上面.

winreg.CreateKeykey, sub_key
创建或打开指定的键,返回一个句柄对象.

key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量.

sub_key是一个字符串,用于命名此方法打开或创建的键.

如果key是预定义的键之一,sub_key可能是None。在那种情况下,返回的句柄是传递给函数的相同键句柄.

如果该键已经存在,则此函数打开现有键.

返回值是句柄打开钥匙。如果函数失败,则会引发OSError异常.

更改版本3.3:上面.

winreg.CreateKeyExkey, sub_key, reserved=0, access=KEY_WRITE
创建或打开指定的键,返回一个句柄对象.

key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量.

sub_key是一个字符串,用于命名此方法打开或创建的键.

reserved是保留的整数,必须为零。默认值为零.

access是一个整数,它指定一个访问掩码,用于描述密钥的所需安全访问。默认是KEY_WRITE。看到访问权限其他允许值.

如果key是预定义的键之一,sub_key可能是None。在那种情况下,返回的句柄是传入函数的相同键句柄.

如果该密钥已存在,则此函数将打开现有密钥.

返回值是已打开密钥的句柄。如果功能失败,则会引发OSError异常.

新版本3.2.

更改版本3.3:上面.

winreg.DeleteKeykey, sub_key
删除指定的密钥

key是一个已经打开的键,或一个预定义的 HKEY_ *常量.

sub_key是一个字符串,必须是key参数标识的键的子键。该值不能是None,键可能没有子键.

This method can not delete keys with subkeys.

如果方法成功,则删除整个键,包括其所有值。如果方法失败,则OSError异常被提出.

改版3.3:以上.

winreg.DeleteKeyExkey, sub_key, access=KEY_WOW64_64KEY, reserved=0
删除指定的键.

注意

DeleteKeyEx()函数是使用RegDeleteKeyExWindows API函数实现的,该函数特定于64位版本的Windows。请参阅RegDeleteKeyEx文档.

key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量.

sub_key是一个字符串,必须是key参数标识的键的子键。这个值一定不能是None,键可能没有子键.

reserved是保留的整数,必须为零。默认为零.

access是一个整数,指定一个访问掩码,用于描述密钥的所需安全访问。默认是KEY_WOW64_64KEY。参见访问权限其他允许值.

This method can not delete keys with subkeys.

如果方法成功,则删除整个键(包括其所有值)。如果方法失败,OSError异常被提出.

在不受支持的Windows版本中,NotImplementedError被抬起.

新版本3.2.

在版本3.3中更改:上面.

winreg.DeleteValuekey, value
从注册表项中删除一个命名值.

key是一个已打开的密钥,或其中一个预定义的 HKEY_ *常量.

value是一个字符串,用于标识要删除的值.

winreg.EnumKey (key, index )
枚举一个打开的注册表项的子键,返回一个字符串.

key是一个已经打开的键,或者一个预定义的 HKEY_ *常量.

index是一个标识的整数要检索的密钥的索引

该函数每次调用时都会检索一个子密钥的名称。它通常被反复调用,直到OSError异常被提示,表示没有更多值可用.

在版本3.3中改变:见 .

winreg.EnumValuekey, index
枚举一个打开的注册表项的值,返回一个元组.

key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量.

index是一个整数,用于标识要检索的值的索引.

该函数每次调用时都会检索一个子项的名称。它通常被重复调用,直到OSError异常被提出,表示没有更多的值.

结果是3项的元组:

索引 含义
0 标识值名称的字符串
1 包含值数据的对象,andwhose类型取决于底层的类型
2 一个标识值数据类型的整数(参见SetValueEx()文档中的表格)

在版本3.3中更改:参见上面.

 

winreg.ExpandEnvironmentStringsstr
扩展环境变量占位符%NAME%REG_EXPAND_SZ

>>> ExpandEnvironmentStrings("%windir%")"C:\\Windows"
winreg.FlushKeykey)这样的字符串
将一个键的所有属性写入注册表.

key已经是打开键,或其中一个预定义的 HKEY_ *常量.

没有必要调用FlushKey()来更改密钥。注册表使用其惰性刷新器将注册表更改刷新到磁盘。注册表更改也会在系统关闭时刷新到磁盘。不是CloseKey()FlushKey()方法仅在所有数据都已写入其中时返回。应用程序应该只调用FlushKey()如果它确实需要确定注册表更改在磁盘上.

注意

如果你不知道是否需要FlushKey()通话,那可能不是.

winreg.LoadKey (key, sub_key, file_name )
在指定键下创建一个子键,并将指定文件中的注册信息存储到该子键中.

keyConnectRegistry()或其中一个常数HKEY_USERS要么 HKEY_LOCAL_MACHINE.

sub_key是一个标识要加载的子项的字符串.

file_name是从中加载注册表数据的文件的名称。这个文件必须是用SaveKey()功能。在文件可分配(FAT)文件系统下,文件名可能没有扩展名.

如果调用进程没有LoadKey(),则调用SE_RESTORE_PRIVILEGE特权。请注意,权限与权限不同 – 请参阅RegLoadKey文档的详细信息.

如果keyConnectRegistry()返回的句柄,那么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是一个标识要打开的子键的字符串

reserved是保留的整数,必须为零。默认值为零.

access是一个整数,它指定一个访问掩码,用于描述密钥的所需安全访问。默认是KEY_READ。参见 AccessRights 其他允许值.

结果是指定键的新句柄.

如果函数失败,OSError被提升了

更改版本3.2:允许使用命名参数.

更改版本3.3:以上.

winreg.QueryInfoKeykey
返回关键字的信息,作为元组.

key是一个已经打开的键,或者是一个预定义的 HKEY_ *常量.

结果是3个元组的元组:

索引 含义
0 一个整数给出子密钥的数量.
1 一个整数给出thiskey的值的数量.
2 当密钥被最后修改时给出一个整数(如果可用)自1601年1月1日起100秒的纳秒.
winreg.QueryValue (key, sub_key)
检索钥匙的无名值,如弦.

key已经是open键,或其中一个预定义的 HKEY_ *常量.

sub_key是一个字符串,它包含与之关联的子键的名称。如果此参数为None或为空,则该函数将检索由SetValue()方法为由key.

标识的密钥设置的值。注册表中的值包含名称,类型和数据组件。此方法检索密钥的第一个具有NULL名称的值的数据。但是下面的API调用没有返回类型,所以总是使用QueryValueEx()如果可能的话

winreg.QueryValueEx// (key, value_name)
检索与打开的注册表项关联的指定值名称的类型和数据.

key是一个已经打开的键,或者一个预定义的 HKEY_ *常量.

value_name是一个表示查询值的字符串.

结果是2项的元组:

索引 含义
0 注册表项的值.
1 一个整数给出注册表类型的值(参见SetValueEx()文档中的表格)
winreg.SaveKeykey, file_name
保存指定的密钥,及其指定文件的所有子键.

key是一个已经打开的键,或其中一个预定义的 HKEY_ *常量.

file_name是要保存的文件的名称注册数据到。此文件不存在。如果此文件名包含扩展名,则无法在文件分配表(FAT)文件系统中使用LoadKey()method.

如果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参数指定的键如果不存在,则SetValuefunction会创建它.

值长度受可用内存的限制。应将长值(超过2048字节)存储为具有存储在configurationregistry中的文件名的文件。这有助于注册表有效地执行.

key必须用KEY_SET_VALUE access.

winreg.SetValueEx(key, value_name, reserved, type, value)
打开参数。在打开的注册表项的值字段中存储数据.

key是一个已经打开的键,或者一个预定义的 HKEY_ *常量.

value_name是一个字符串,用于命名与该值相关联的子键.

reserved可以是任何东西- 零总是传递给API .

type是一个整数,指定数据的类型。请参阅值类型了解可用的类型.

value是一个指定新值的字符串.

这个方法还可以设置附加值和类型指定密钥的信息。钥匙参数识别的钥匙必须打开KEY_SET_VALUE access.

要打开钥匙,请使用CreateKey()OpenKey()方法

值长度受可用内存的限制。应将长值(超过2048字节)存储为具有存储在configurationregistry中的文件名的文件。这有助于注册表有效地执行.

winreg.DisableReflectionKey (key )
禁用在64位操作系统上运行的32位进程的注册表反射.

key是一个已经打开的键,或者一个预定义的 HKEY_ *常量.

一般会提高NotImplemented如果在32位操作系统上执行的话

如果该键不在反射列表中,则该函数成功但没有效果。禁用键的反射不会影响anysubkeys的反射.

winreg.EnableReflectionKey (key )
恢复指定的禁用键的注册表反射.

key是一个已经打开的键,或者一个预定义的 HKEY_ *常量.

一般会提升NotImplemented如果在32位操作系统上执行.

恢复键的反射不会影响任何子键的反射.

winreg.QueryReflectionKey (key )
确定指定键的反射状态.

key是一个已经打开的键,或者一个预定义的 HKEY_ *常量.

如果反射被禁用则返回True.

一般会提高NotImplemented如果在32位操作系统上执行

 

常量

以下常量定义用于许多_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_ALL_ACCESS
结合STANDARD_RIGHTS_REQUIRED,KEY_QUERY_VALUE,KEY_SET_VALUE, KEY_CREATE_SUB_KEY,KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY,和KEY_CREATE_LINK访问权限。
winreg.KEY_WRITE
结合STANDARD_RIGHTS_WRITE,KEY_SET_VALUE,和KEY_CREATE_SUB_KEY访问权限
winreg.KEY_READ
组合STANDARD_RIGHTS_READ,KEY_QUERY_VALUE,KEY_ENUMERATE_SUB_KEYSKEY_NOTIFY values.
winreg.KEY_EXECUTE
等于KEY_READ.
winreg.KEY_QUERY_VALUE
查询a的值是必需的注册表键.
winreg.KEY_SET_VALUE
创建,删除或设置注册表值所必需的.
winreg.KEY_CREATE_SUB_KEY
需要创建注册表项的子项.
winreg.KEY_ENUMERATE_SUB_KEYS
需要枚举注册表项的子项.
winreg.KEY_NOTIFY
需要为注册表项或注册表项的forsubkeys请求更改通知.
保留供系统使用.

 

64-bit具体

有关详细信息,请参阅访问备用注册表视图.

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位的big-endian格式的数字.
winreg.REG_EXPAND_SZ
以空值终止的字符串,包含对environmentvariables的引用(%PATH%).
一个Unicode符号链接.
winreg.REG_MULTI_SZ
一系列以null结尾的字符串,由两个空字符终止。(Python自动处理这个终止。)
winreg.REG_NONE
没有定义的值类型。
winreg.REG_QWORD
一个64位的数字.

版本3.6.

winreg.REG_QWORD_LITTLE_ENDIAN
小端格式的64位数字。相当于 REG_QWORD.

版本3.6.

winreg.REG_RESOURCE_LIST
设备驱动资源列表.
winreg.REG_FULL_RESOURCE_DESCRIPTOR
硬件设置
winreg.REG_RESOURCE_REQUIREMENTS_LIST
硬件资源列表
winreg.REG_SZ
以null结尾的字符串

 

注册表处理对象

此对象包装Windows HKEY对象,在对象被销毁时自动关闭它。为了保证清理,可以调用对象上的Close()方法,或CloseKey()函数

此模块中的所有注册表函数都返回其中一个对象.

此模块中接受句柄对象的所有注册表函数也接受整数,但是,鼓励使用句柄对象.

手柄对象为__bool__()提供语义 – 因此

if handle:
    print("Yes")

如果手柄当前有效(未关闭或已拆除),将打印Yes .

该对象还支持比较语义,因此如果它们都引用相同的底层Windows句柄值,则句柄对象将进行比较.

句柄对象可以转换为整数(例如,使用内置的int()函数),在这种情况下,返回基础Windows句柄值。你也可以用Detach()返回整数句柄的方法,并将Windows句柄与句柄对象断开.

PyHKEY.Close ()
关闭底层的Windows句柄.

如果手柄已经关闭,没有出现错误.

PyHKEY.Detach()
从把手上取下窗把手.

结果是一个在被释放之前保存句柄值的整数。如果手柄已经分离或关闭,这将返回零件

调用此功能后,手柄实际上无效,但手柄未关闭。当你需要在句柄对象的生命周期内存在下面的Win32句柄时,你会调用这个函数.

PyHKEY.__enter__ (
PyHKEY.__exit__ (*exc_info)
HKEY对象实现__enter__()__exit__()并因此支持with语句的上下文协议:

with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:
    ...  # work with key

将自动关闭key当控制离开with block.