| \section{\module{_winreg} -- |
| Windows registry access} |
| |
| \declaremodule[-winreg]{extension}{_winreg} |
| \platform{Windows} |
| \modulesynopsis{Routines and objects for manipulating the Windows registry.} |
| \sectionauthor{Mark Hammond}{MarkH@ActiveState.com} |
| |
| \versionadded{2.0} |
| |
| 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. |
| |
| This module exposes a very low-level interface to the Windows |
| registry; it is expected that in the future a new \code{winreg} |
| module will be created offering a higher-level interface to the |
| registry API. |
| |
| This module offers the following functions: |
| |
| |
| \begin{funcdesc}{CloseKey}{hkey} |
| Closes a previously opened registry key. |
| The hkey argument specifies a previously opened key. |
| |
| Note that if \var{hkey} is not closed using this method, (or the |
| \method{handle.Close()} closed when the \var{hkey} object is |
| destroyed by Python. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{ConnectRegistry}{computer_name, key} |
| Establishes a connection to a predefined registry handle on |
| another computer, and returns a \dfn{handle object} |
| |
| \var{computer_name} is the name of the remote computer, of the |
| form \samp{\e\e computername}. If \code{None}, the local computer |
| is used. |
| |
| \var{key} is the predefined handle to connect to. |
| |
| The return value is the handle of the opened key. |
| If the function fails, an \exception{EnvironmentError} exception is |
| raised. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{CreateKey}{key, sub_key} |
| Creates or opens the specified key, returning a \dfn{handle object} |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that names the key this method opens |
| or creates. |
| |
| If \var{key} is one of the predefined keys, \var{sub_key} may |
| be \code{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 \exception{EnvironmentError} exception is |
| raised. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{DeleteKey}{key, sub_key} |
| Deletes the specified key. |
| |
| \var{key} is an already open key, or any one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that must be a subkey of the key |
| identified by the \var{key} parameter. This value must not be |
| \code{None}, and the key may not have subkeys. |
| |
| \emph{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 \exception{EnvironmentError} |
| exception is raised. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{DeleteValue}{key, value} |
| Removes a named value from a registry key. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{value} is a string that identifies the value to remove. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{EnumKey}{key, index} |
| Enumerates subkeys of an open registry key, returning a string. |
| |
| \var{key} is an already open key, or any one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{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 |
| \exception{EnvironmentError} exception |
| is raised, indicating, no more values are available. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{EnumValue}{key, index} |
| Enumerates values of an open registry key, returning a tuple. |
| |
| \var{key} is an already open key, or any one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{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 |
| \exception{EnvironmentError} exception is raised, indicating |
| no more values. |
| |
| The result is a tuple of 3 items: |
| |
| \begin{tableii}{c|p{3in}}{code}{Index}{Meaning} |
| \lineii{0}{A string that identifies the value name} |
| \lineii{1}{An object that holds the value data, and whose |
| type depends on the underlying registry type} |
| \lineii{2}{An integer that identifies the type of the value data} |
| \end{tableii} |
| |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{FlushKey}{key} |
| Writes all the attributes of a key to the registry. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| It is not necessary to call RegFlushKey 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. Unlike \function{CloseKey()}, the \function{FlushKey()} method |
| returns only when all the data has been written to the registry. |
| An application should only call \function{FlushKey()} if it requires absolute |
| certainty that registry changes are on disk. |
| |
| \emph{If you don't know whether a \function{FlushKey()} call is required, it |
| probably isn't.} |
| |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{RegLoadKey}{key, sub_key, file_name} |
| Creates a subkey under the specified key and stores registration |
| information from a specified file into that subkey. |
| |
| \var{key} is an already open key, or any of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that identifies the sub_key to load |
| |
| \var {file_name} is the name of the file to load registry data from. |
| This file must have been created with the \function{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 the |
| \constant{SE_RESTORE_PRIVILEGE} privilege. Note that privileges |
| are different than permissions - see the Win32 documentation for |
| more details. |
| |
| If \var{key} is a handle returned by \function{ConnectRegistry()}, |
| then the path specified in \var{fileName} is relative to the |
| remote computer. |
| |
| The Win32 documentation implies \var{key} must be in the |
| \constant{HKEY_USER} or \constant{HKEY_LOCAL_MACHINE} tree. |
| This may or may not be true. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{OpenKey}{key, sub_key\optional{, res\code{ = 0}}\optional{, sam\code{ = \constant{KEY_READ}}}} |
| Opens the specified key, returning a \dfn{handle object} |
| |
| \var{key} is an already open key, or any one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that identifies the sub_key to open |
| |
| \var{res} is a reserved integer, and must be zero. The default is zero. |
| |
| \var{sam} is an integer that specifies an access mask that describes |
| the desired security access for the key. Default is \constant{KEY_READ} |
| |
| The result is a new handle to the specified key |
| |
| If the function fails, \exception{EnvironmentError} is raised. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{OpenKeyEx}{} |
| The functionality of \function{OpenKeyEx()} is provided via |
| \function{OpenKey()}, by the use of default arguments. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{QueryInfoKey}{key} |
| Returns information about a key, as a tuple. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| The result is a tuple of 3 items: |
| |
| \begin{tableii}{c|p{3in}}{code}{Index}{Meaning} |
| \lineii{0}{An integer giving the number of sub keys this key has.} |
| \lineii{1}{An integer giving the number of values this key has.} |
| \lineii{2}{A long integer giving when the key was last modified (if |
| available) as 100's of nanoseconds since Jan 1, 1600.} |
| \end{tableii} |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{QueryValue}{key, sub_key} |
| Retrieves the unnamed value for a key, as a string |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that holds the name of the subkey with which |
| the value is associated. If this parameter is \code{None} or empty, the |
| function retrieves the value set by the \function{SetValue()} method |
| for the key identified by \var{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, Lame Lame Lame, |
| DO NOT USE THIS!!! |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{QueryValueEx}{key, value_name} |
| Retrieves the type and data for a specified value name associated with |
| an open registry key. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{value_name} is a string indicating the value to query. |
| |
| The result is a tuple of 2 items: |
| |
| \begin{tableii}{c|p{3in}}{code}{Index}{Meaning} |
| \lineii{0}{The value of the registry item.} |
| \lineii{1}{An integer giving the registry type for this value.} |
| \end{tableii} |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{SaveKey}{key, file_name} |
| Saves the specified key, and all its subkeys to the specified file. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{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 |
| \method{LoadKey()}, \method{ReplaceKey()} or |
| \method{RestoreKey()} methods. |
| |
| If \var{key} represents a key on a remote computer, the path |
| described by \var{file_name} is relative to the remote computer. |
| The caller of this method must possess the \constant{SeBackupPrivilege} |
| security privilege. Note that privileges are different than permissions |
| - see the Win32 documentation for more details. |
| |
| This function passes NULL for \var{security_attributes} to the API. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{SetValue}{key, sub_key, type, value} |
| Associates a value with a specified key. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that names the subkey with which the value |
| is associated. |
| |
| \var{type} is an integer that specifies the type of the data. |
| Currently this must be \constant{REG_SZ}, meaning only strings are |
| supported. Use the \function{SetValueEx()} function for support for |
| other data types. |
| |
| \var{value} is a string that specifies the new value. |
| |
| If the key specified by the \var{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. |
| |
| The key identified by the \var{key} parameter must have been |
| opened with \constant{KEY_SET_VALUE} access. |
| \end{funcdesc} |
| |
| |
| \begin{funcdesc}{SetValueEx}{key, value_name, reserved, type, value} |
| Stores data in the value field of an open registry key. |
| |
| \var{key} is an already open key, or one of the predefined |
| \constant{HKEY_*} constants. |
| |
| \var{sub_key} is a string that names the subkey with which the |
| value is associated. |
| |
| \var{type} is an integer that specifies the type of the data. |
| This should be one of the following constants defined in this module: |
| |
| \begin{tableii}{l|p{3in}}{constant}{Constant}{Meaning} |
| \lineii{REG_BINARY}{Binary data in any form.} |
| \lineii{REG_DWORD}{A 32-bit number.} |
| \lineii{REG_DWORD_LITTLE_ENDIAN}{A 32-bit number in little-endian format.} |
| \lineii{REG_DWORD_BIG_ENDIAN}{A 32-bit number in big-endian format.} |
| \lineii{REG_EXPAND_SZ}{Null-terminated string containing references |
| to environment variables (\samp{\%PATH\%}).} |
| \lineii{REG_LINK}{A Unicode symbolic link.} |
| \lineii{REG_MULTI_SZ}{A sequence of null-terminated strings, |
| terminated by two null characters. (Python handles |
| this termination automatically.)} |
| \lineii{REG_NONE}{No defined value type.} |
| \lineii{REG_RESOURCE_LIST}{A device-driver resource list.} |
| \lineii{REG_SZ}{A null-terminated string.} |
| \end{tableii} |
| |
| \var{reserved} can be anything - zero is always passed to the |
| API. |
| |
| \var{value} is a string that specifies the new value. |
| |
| This method can also set additional value and type information for the |
| specified key. The key identified by the key parameter must have been |
| opened with \constant{KEY_SET_VALUE} access. |
| |
| To open the key, use the \function{CreateKeyEx()} or |
| \function{OpenKey()} methods. |
| |
| 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. |
| \end{funcdesc} |
| |
| |
| |
| \subsection{Registry Handle Objects \label{handle-object}} |
| |
| This object wraps a Windows HKEY object, automatically closing it when |
| the object is destroyed. To guarantee cleanup, you can call either |
| the \method{Close()} method on the object, or the |
| \function{CloseKey()} function. |
| |
| All registry functions in this module return one of these objects. |
| |
| All registry functions in this module which accept a handle object |
| also accept an integer, however, use of the handle object is |
| encouraged. |
| |
| Handle objects provide semantics for \method{__nonzero__()} - thus |
| \begin{verbatim} |
| if handle: |
| print "Yes" |
| \end{verbatim} |
| will print \code{Yes} if the handle is currently valid (has not been |
| closed or detached). |
| |
| The object also support comparison semantics, so handle |
| objects will compare true if they both reference the same |
| underlying Windows handle value. |
| |
| Handle objects can be converted to an integer (eg, using the |
| builtin \function{int()} function, in which case the underlying |
| Windows handle value is returned. You can also use the |
| \method{Detach()} method to return the integer handle, and |
| also disconnect the Windows handle from the handle object. |
| |
| \begin{methoddesc}{Close}{} |
| Closes the underlying Windows handle. |
| |
| If the handle is already closed, no error is raised. |
| \end{methoddesc} |
| |
| |
| \begin{methoddesc}{Detach}{} |
| Detaches the Windows handle from the handle object. |
| |
| The result is an integer (or long on 64 bit Windows) that holds |
| the value of the handle before it is detached. If the |
| handle is already detached or closed, this will return zero. |
| |
| After calling this function, the handle is effectively invalidated, |
| but the handle is not closed. You would call this function when |
| you need the underlying Win32 handle to exist beyond the lifetime |
| of the handle object. |
| \end{methoddesc} |