🔒 EXCLUSIVE: ./library/winreg.html - Full Archive
34.3. winreg — Windows registry access¶
These functions expose the Windows registry API to Python. Instead of using an integer as the registry handle, a handle object is used to ensure that the handles are closed correctly, even if the programmer neglects to explicitly close them.
Changed in version 3.3: Several functions in this module used to raise a
WindowsError, which is now an alias of OSError.
34.3.1. Functions¶
This module offers the following functions:
-
winreg.CloseKey(hkey)¶ Closes a previously opened registry key. The hkey argument specifies a previously opened key.
Note
If hkey is not closed using this method (or via
hkey.Close()), it is closed when the hkey object is destroyed by Python.
-
winreg.ConnectRegistry(computer_name, key)¶ Establishes a connection to a predefined registry handle on another computer, and returns a handle object.
computer_name is the name of the remote computer, of the form
r"\\computername". IfNone, the local computer is used.key is the predefined handle to connect to.
The return value is the handle of the opened key. If the function fails, an
OSErrorexception is raised.Changed in version 3.3: See above.
-
winreg.CreateKey(key, sub_key)¶ Creates or opens the specified key, returning a handle object.
key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that names the key this method opens or creates.
If key is one of the predefined keys, sub_key may be
None. In that case, the handle returned is the same key handle passed in to the function.If the key already exists, this function opens the existing key.
The return value is the handle of the opened key. If the function fails, an
OSErrorexception is raised.Changed in version 3.3: See above.
-
winreg.CreateKeyEx(key, sub_key, reserved=0, access=KEY_WRITE)¶ Creates or opens the specified key, returning a handle object.
key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that names the key this method opens or creates.
reserved is a reserved integer, and must be zero. The default is zero.
access is an integer that specifies an access mask that describes the desired security access for the key. Default is
KEY_WRITE. See Access Rights for other allowed values.If key is one of the predefined keys, sub_key may be
None. In that case, the handle returned is the same key handle passed in to the function.If the key already exists, this function opens the existing key.
The return value is the handle of the opened key. If the function fails, an
OSErrorexception is raised.New in version 3.2.
Changed in version 3.3: See above.
-
winreg.DeleteKey(key, sub_key)¶ Deletes the specified key.
key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that must be a subkey of the key identified by the key parameter. This value must not be
None, and the key may not have subkeys.This method can not delete keys with subkeys.
If the method succeeds, the entire key, including all of its values, is removed. If the method fails, an
OSErrorexception is raised.Changed in version 3.3: See above.
-
winreg.DeleteKeyEx(key, sub_key, access=KEY_WOW64_64KEY, reserved=0)¶ Deletes the specified key.
Note
The
DeleteKeyEx()function is implemented with the RegDeleteKeyEx Windows API function, which is specific to 64-bit versions of Windows. See the RegDeleteKeyEx documentation.key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that must be a subkey of the key identified by the key parameter. This value must not be
None, and the key may not have subkeys.reserved is a reserved integer, and must be zero. The default is zero.
access is an integer that specifies an access mask that describes the desired security access for the key. Default is
KEY_WOW64_64KEY. See Access Rights for other allowed values.This method can not delete keys with subkeys.
If the method succeeds, the entire key, including all of its values, is removed. If the method fails, an
OSErrorexception is raised.On unsupported Windows versions,
NotImplementedErroris raised.New in version 3.2.
Changed in version 3.3: See above.
-
winreg.DeleteValue(key, value)¶ Removes a named value from a registry key.
key is an already open key, or one of the predefined HKEY_* constants.
value is a string that identifies the value to remove.
-
winreg.EnumKey(key, index)¶ Enumerates subkeys of an open registry key, returning a string.
key is an already open key, or one of the predefined HKEY_* constants.
index is an integer that identifies the index of the key to retrieve.
The function retrieves the name of one subkey each time it is called. It is typically called repeatedly until an
OSErrorexception is raised, indicating, no more values are available.Changed in version 3.3: See above.
-
winreg.EnumValue(key, index)¶ Enumerates values of an open registry key, returning a tuple.
key is an already open key, or one of the predefined HKEY_* constants.
index is an integer that identifies the index of the value to retrieve.
The function retrieves the name of one subkey each time it is called. It is typically called repeatedly, until an
OSErrorexception is raised, indicating no more values.The result is a tuple of 3 items:
Index
Meaning
0A string that identifies the value name
1An object that holds the value data, and whose type depends on the underlying registry type
2An integer that identifies the type of the value data (see table in docs for
SetValueEx())Changed in version 3.3: See above.
-
winreg.ExpandEnvironmentStrings(str)¶ Expands environment variable placeholders
%NAME%in strings likeREG_EXPAND_SZ:>>> ExpandEnvironmentStrings('%windir%') 'C:\\Windows'
-
winreg.FlushKey(key)¶ Writes all the attributes of a key to the registry.
key is an already open key, or one of the predefined HKEY_* constants.
It is not necessary to call
FlushKey()to change a key. Registry changes are flushed to disk by the registry using its lazy flusher. Registry changes are also flushed to disk at system shutdown. UnlikeCloseKey(), theFlushKey()method returns only when all the data has been written to the registry. An application should only callFlushKey()if it requires absolute certainty that registry changes are on disk.Note
If you don’t know whether a
FlushKey()call is required, it probably isn’t.
-
winreg.LoadKey(key, sub_key, file_name)¶ Creates a subkey under the specified key and stores registration information from a specified file into that subkey.
key is a handle returned by
ConnectRegistry()or one of the constantsHKEY_USERSorHKEY_LOCAL_MACHINE.sub_key is a string that identifies the subkey to load.
file_name is the name of the file to load registry data from. This file must have been created with the
SaveKey()function. Under the file allocation table (FAT) file system, the filename may not have an extension.A call to
LoadKey()fails if the calling process does not have theSE_RESTORE_PRIVILEGEprivilege. Note that privileges are different from permissions – see the RegLoadKey documentation for more details.If key is a handle returned by
ConnectRegistry(), then the path specified in file_name is relative to the remote computer.
-
winreg.OpenKey(key, sub_key, reserved=0, access=KEY_READ)¶ -
winreg.OpenKeyEx(key, sub_key, reserved=0, access=KEY_READ)¶ Opens the specified key, returning a handle object.
key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that identifies the sub_key to open.
reserved is a reserved integer, and must be zero. The default is zero.
access is an integer that specifies an access mask that describes the desired security access for the key. Default is
KEY_READ. See Access Rights for other allowed values.The result is a new handle to the specified key.
If the function fails,
OSErroris raised.Changed in version 3.2: Allow the use of named arguments.
Changed in version 3.3: See above.
-
winreg.QueryInfoKey(key)¶ Returns information about a key, as a tuple.
key is an already open key, or one of the predefined HKEY_* constants.
The result is a tuple of 3 items:
Index
Meaning
0An integer giving the number of sub keys this key has.
1An integer giving the number of values this key has.
2An integer giving when the key was last modified (if available) as 100’s of nanoseconds since Jan 1, 1601.
-
winreg.QueryValue(key, sub_key)¶ Retrieves the unnamed value for a key, as a string.
key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that holds the name of the subkey with which the value is associated. If this parameter is
Noneor empty, the function retrieves the value set by theSetValue()method for the key identified by key.Values in the registry have name, type, and data components. This method retrieves the data for a key’s first value that has a NULL name. But the underlying API call doesn’t return the type, so always use
QueryValueEx()if possible.
-
winreg.QueryValueEx(key, value_name)¶ Retrieves the type and data for a specified value name associated with an open registry key.
key is an already open key, or one of the predefined HKEY_* constants.
value_name is a string indicating the value to query.
The result is a tuple of 2 items:
Index
Meaning
0The value of the registry item.
1An integer giving the registry type for this value (see table in docs for
SetValueEx())
-
winreg.SaveKey(key, file_name)¶ Saves the specified key, and all its subkeys to the specified file.
key is an already open key, or one of the predefined HKEY_* constants.
file_name is the name of the file to save registry data to. This file cannot already exist. If this filename includes an extension, it cannot be used on file allocation table (FAT) file systems by the
LoadKey()method.If key represents a key on a remote computer, the path described by file_name is relative to the remote computer. The caller of this method must possess the
SeBackupPrivilegesecurity privilege. Note that privileges are different than permissions – see the Conflicts Between User Rights and Permissions documentation for more details.This function passes NULL for security_attributes to the API.
-
winreg.SetValue(key, sub_key, type, value)¶ Associates a value with a specified key.
key is an already open key, or one of the predefined HKEY_* constants.
sub_key is a string that names the subkey with which the value is associated.
type is an integer that specifies the type of the data. Currently this must be
REG_SZ, meaning only strings are supported. Use theSetValueEx()function for support for other data types.value is a string that specifies the new value.
If the key specified by the sub_key parameter does not exist, the SetValue function creates it.
Value lengths are limited by available memory. Long values (more than 2048 bytes) should be stored as files with the filenames stored in the configuration registry. This helps the registry perform efficiently.
