winreg — Доступ к реестру Windows¶
Функции предоставляют API реестра Windows для Python. Вместо использования целого числа в качестве дескриптора реестра, используется обрабатываемый объект, чтобы убедиться, что дескрипторы закрыты правильно, даже если программист пренебрегает их явным закрытием.
Изменено в версии 3.3: Несколько функций в этом модуле поднимают WindowsError, который теперь
является алиас OSError.
Функции¶
Модуль предлагает следующие функции:
-
winreg.CloseKey(hkey)¶ Закрывает ранее открытый раздел реестра. Аргумент hkey указывает ранее открытый ключ.
Примечание
Если hkey не закрыт этим методом (или с помощью
hkey.Close()), он закрывается, когда hkey объект уничтожается Python.
-
winreg.ConnectRegistry(computer_name, key)¶ Устанавливает подключение к предопределенному дескриптору реестра на другом компьютере и возвращает обрабатываемый объект.
computer_name - имя удаленного компьютера
r"\\computername"формы. ЕслиNone, локальная компьютер будет используемый.key - предопределенный дескриптор для подключения.
Возвращает значение является дескриптором открытого ключа. При сбое функции возникает исключение
OSError.Raises an auditing event
winreg.ConnectRegistrywith argumentscomputer_name,key.Изменено в версии 3.3: Смотрите выше.
-
winreg.CreateKey(key, sub_key)¶ Создает или открывает указанный ключ, возвращая обрабатываемый объект.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
sub_key - это строка, который называет ключ, открываемый или создаваемый этим методом.
Если key является одной из предварительно определенных клавиш, sub_key может быть
None. В этом случае дескриптор возвращенный является тем же самым дескриптором клавиши, переданным функции.Если ключ уже существует, эта функция открывает существующий ключ.
Возвращает значение является дескриптором открытого ключа. При сбое функции возникает исключение
OSError.Raises an auditing event
winreg.CreateKeywith argumentskey,sub_key,access.Raises an auditing event
winreg.OpenKey/resultwith argumentkey.Изменено в версии 3.3: Смотрите выше.
-
winreg.CreateKeyEx(key, sub_key, reserved=0, access=KEY_WRITE)¶ Создает или открывает указанный ключ, возвращая обрабатываемый объект.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
sub_key - это строка, который называет ключ, открываемый или создаваемый этим методом.
reserved является зарезервированным целым числом и должно быть равно нулю. Значение по умолчанию равно нулю.
access - целое число, указывающее маску доступа, описывающую требуемый доступ для ключа. Значение по умолчанию -
KEY_WRITE. Другие разрешенные Права доступа см. в разделе значения.Если key является одной из предварительно определенных ключей, sub_key может быть
None. В этом случае дескриптор возвращенный является тем же самым дескриптором ключа, переданным функции.Если ключ уже существует, эта функция открывает существующий ключ.
Возвращает значение является дескриптором открытого ключа. При сбое функции возникает исключение
OSError.Raises an auditing event
winreg.CreateKeywith argumentskey,sub_key,access.Raises an auditing event
winreg.OpenKey/resultwith argumentkey.Добавлено в версии 3.2.
Изменено в версии 3.3: Смотрите выше.
-
winreg.DeleteKey(key, sub_key)¶ Удаляет указанный ключ.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
sub_key - это строка, который должен быть вложенным ключом ключа, определяемого параметром key. Этот значение не должен быть
None, и ключ может не иметь подразделов.Этот метод не может удалять ключи с подключами.
При успешном выполнении метода удаляется весь ключ, включая все его значения. При сбое метода возникает исключение
OSError.Raises an auditing event
winreg.DeleteKeywith argumentskey,sub_key,access.Изменено в версии 3.3: Смотрите выше.
-
winreg.DeleteKeyEx(key, sub_key, access=KEY_WOW64_64KEY, reserved=0)¶ Удаляет указанный ключ.
Примечание
Функция
DeleteKeyEx()реализована с помощью функции Windows API Reg, которая специфична для 64-разрядных версий Windows. Смотрите документацию по RegDeleteKeyEx.key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
sub_key - это строка, который должен быть вложенным ключом ключа, определяемого параметром key. Этот значение не должен быть
None, и ключ может не иметь подразделов.reserved является зарезервированным целым числом и должно быть равно нулю. Значение по умолчанию равно нулю.
access - целое число, указывающее маску доступа, описывающую требуемый доступ для ключа. Значение по умолчанию -
KEY_WOW64_64KEY. Другие разрешенные Права доступа см. в разделе значения.Этот метод не может удалять ключи с подключами.
При успешном выполнении метода удаляется весь ключ, включая все его значения. При сбое метода возникает исключение
OSError.В неподдерживаемых версиях Windows возникает
NotImplementedError.Raises an auditing event
winreg.DeleteKeywith argumentskey,sub_key,access.Добавлено в версии 3.2.
Изменено в версии 3.3: Смотрите выше.
-
winreg.DeleteValue(key, value)¶ Удаляет именованный значение из раздела реестра.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
value - это строка, определяющий удаляемый значение.
Raises an auditing event
winreg.DeleteValuewith argumentskey,value.
-
winreg.EnumKey(key, index)¶ Перечисляет подразделы открытого раздела реестра, возвращая строка.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
index - целое число, определяющее индекс извлекаемого ключа.
Функция извлекает имя одного подраздела при каждом вызове. Обычно он вызывается повторно до тех пор, пока не возникнет
OSErrorисключение, указывающее на то, что больше нет доступных значения.Raises an auditing event
winreg.EnumKeywith argumentskey,index.Изменено в версии 3.3: Смотрите выше.
-
winreg.EnumValue(key, index)¶ Перечисляет значения открытого раздела реестра, возвращая кортеж.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
index - целое число, определяющее индекс извлекаемого значение.
Функция извлекает имя одного подраздела при каждом вызове. Обычно он вызывается повторно до тех пор, пока не будет создано
OSErrorисключение, указывающее на отсутствие значения.В результате получается кортеж из 3 элементов:
Индекс Значение 0Строка, определяющая значение имени. 1Объект, содержащий данные значения и тип которого зависит от базового типа реестра 2Целое число, определяющее тип значения данных (см. таблицу в документах для SetValueEx())Raises an auditing event
winreg.EnumValuewith argumentskey,index.Изменено в версии 3.3: Смотрите выше.
-
winreg.ExpandEnvironmentStrings(str)¶ Расширяет местозаполнители переменных среды,
%NAME%в строки, подобныхREG_EXPAND_SZ:>>> ExpandEnvironmentStrings('%windir%') 'C:\\Windows'
Raises an auditing event
winreg.ExpandEnvironmentStringswith argumentstr.
-
winreg.FlushKey(key)¶ Записывает все атрибуты раздела в реестр.
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 путь относится к удаленному компьютеру.Raises an auditing event
winreg.LoadKeywith argumentskey,sub_key,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поднимается.Raises an auditing event
winreg.OpenKeywith argumentskey,sub_key,access.Raises an auditing event
winreg.OpenKey/resultwith argumentkey.Изменено в версии 3.2: Разрешить использование именованных аргументов.
Изменено в версии 3.3: Смотрите выше.
-
winreg.QueryInfoKey(key)¶ Возвращает информацию о ключе, как кортеж.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
В результате получается кортеж из 3 пунктов:
Индекс Значение 0Целое число, указывающее количество вложенных ключей, которыми обладает этот ключ. 1Целое число, дающее число значений, которые имеет этот ключ. 2Целое число, дающее время последнего изменения ключа (если доступно) в 100 наносекунд с 1 января 1601 года. Raises an auditing event
winreg.QueryInfoKeywith argumentkey.
-
winreg.QueryValue(key, sub_key)¶ Извлекает неименованное значение для ключа в виде строки.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
sub_key - это строка, в котором содержится имя подраздела, с которым связан значение. Если этот параметр
Noneили пуст, функция извлекает значение, заданные методомSetValue()для ключа, идентифицированного key.Значения в реестре имеют имя, тип и компоненты данных. Этот метод извлекает данные для первого значение ключа с
NULLименем. Но базовый вызов API не возвращает тип, поэтому всегда используйтеQueryValueEx(), если это возможно.Raises an auditing event
winreg.QueryValuewith argumentskey,sub_key,value_name.
-
winreg.QueryValueEx(key, value_name)¶ Извлекает тип и данные для указанного имени значение, связанного с открытым разделом реестра.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
value_name - это строка, указывающее значение запроса.
В результате получается кортеж из 2 пунктов:
Индекс Значение 0Значение элемента реестра. 1Целое число, определяющее тип реестра для этого значение (см. таблицу в документах для SetValueEx())Raises an auditing event
winreg.QueryValuewith argumentskey,sub_key,value_name.
-
winreg.SaveKey(key, file_name)¶ Сохранение указанного ключа и всех его подразделов в указанном файле.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
file_name - имя файла для сохранения данных реестра. Этот файл уже не может существовать. Если это имя файла содержит расширение, его нельзя используемый в файловых системах таблицы распределения файлов (FAT) методом
LoadKey().Если key представляет ключ на удаленном компьютере, путь, описанный file_name, относится к удаленному компьютеру. Вызывающий объект этого метода должен обладать
SeBackupPrivilegeпривилегией безопасности. Обратите внимание, что привилегии отличаются от разрешений - дополнительные сведения см. в Документация по конфликтам между правами пользователей и разрешениями.Эта функция передает
NULLдля security_attributes в API.Raises an auditing event
winreg.SaveKeywith argumentskey,file_name.
-
winreg.SetValue(key, sub_key, type, value)¶ Связывает значение с указанным ключом.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
sub_key - это строка с именем подраздела, с которым связан значение.
type - целое число, указывающее тип данных. В настоящее время это необходимо
REG_SZ, что означает, что поддерживаются только строки. Используйте функциюSetValueEx()для поддержки других типов данных.value - это строка, определяющий новый значение.
Если ключ, заданный параметром sub_key, не существует, его создает функция SetValue.
Длины значений ограничены доступной памятью. Длинные значения (более 2048 байт) должны храниться как файлы с именами файлов, сохраненными в реестре конфигурации. Это помогает реестру работать эффективно.
Ключ, определяемый параметром key, должен быть открыт с
KEY_SET_VALUEдоступом.Raises an auditing event
winreg.SetValuewith argumentskey,sub_key,type,value.
-
winreg.SetValueEx(key, value_name, reserved, type, value)¶ Сохраняет данные в поле значение открытого раздела реестра.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
value_name - это строка с именем подраздела, с которым связано значение.
reserved может быть что угодно - ноль всегда передается в API.
type - целое число, указывающее тип данных. Доступные типы см. в разделе Типы значений.
value - это строка, определяющий новый значение.
Этот метод также может задавать дополнительные значение и информацию о типе для указанного ключа. Ключ, определяемый параметром ключа, должен быть открыт с
KEY_SET_VALUEдоступом.Чтобы открыть ключ, используйте методы
CreateKey()илиOpenKey().Длины значений ограничены доступной памятью. Длинные значения (более 2048 байт) должны храниться как файлы с именами файлов, сохраненными в реестре конфигурации. Это помогает реестру работать эффективно.
Raises an auditing event
winreg.SetValuewith argumentskey,sub_key,type,value.
-
winreg.DisableReflectionKey(key)¶ Отключает отражение реестра для 32-разрядных процессов, запущенных в 64-разрядной операционной системе.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
Обычно вызывает
NotImplementedErrorпри выполнении в 32-разрядной операционной системе.Если ключ отсутствует в списке отражений, функция выполняется успешно, но не действует. Отключение отражения для ключа не влияет на отражение каких-либо подразделов.
Raises an auditing event
winreg.DisableReflectionKeywith argumentkey.
-
winreg.EnableReflectionKey(key)¶ Восстановление отражения реестра для указанного отключенного раздела.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
Обычно вызывает
NotImplementedErrorпри выполнении в 32-разрядной операционной системе.Восстановление отражения для ключа не влияет на отражение каких-либо подразделов.
Raises an auditing event
winreg.EnableReflectionKeywith argumentkey.
-
winreg.QueryReflectionKey(key)¶ Определяет состояние отражения для указанного ключа.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы.
Возвращает
True, если отражение отключено.Обычно вызывает
NotImplementedErrorпри выполнении в 32-разрядной операционной системе.Raises an auditing event
winreg.QueryReflectionKeywith argumentkey.
Константы¶
Следующие константы определены для использования во многих _winreg функциях.
HKEY_* константы¶
-
winreg.HKEY_CLASSES_ROOT¶ Записи реестра, подчиненные этому разделу, определяют типы (или классы) документов и свойства, связанные с этими типами. Командные и COM-приложения используют информацию, хранящуюся в этом разделе.
-
winreg.HKEY_CURRENT_USER¶ Записи реестра, подчиненные этому разделу, определяют предпочтения текущего пользователя. Эти настройки включают настройки переменных среды, данные о группах программ, цветах, принтерах, сетевых соединениях и предпочтениях приложений.
-
winreg.HKEY_LOCAL_MACHINE¶ Записи реестра, подчиненные этому разделу, определяют физические состояние компьютера, включая данные о типе шины, системной памяти, установленном оборудовании и программном обеспечении.
-
winreg.HKEY_USERS¶ Записи реестра, подчиненные этому разделу, определяют конфигурацию пользователя по умолчанию для новых пользователей на локальная компьютере и конфигурацию пользователя для текущего пользователя.
-
winreg.HKEY_PERFORMANCE_DATA¶ Записи реестра, подчиненные этому разделу, позволяют получать доступ к данным о производительности. Данные фактически не хранятся в реестре; функции реестра заставляют систему собирать данные из своего источника.
-
winreg.HKEY_CURRENT_CONFIG¶ Содержит сведения о текущем профиле оборудования локальная компьютерной системы.
-
winreg.HKEY_DYN_DATA¶ Этот ключ не используемый в версиях Windows после 98.
Права доступа¶
Дополнительные сведения см. в разделе Безопасность ключа реестра и доступ.
-
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_KEYSиKEY_NOTIFYзначения.
-
winreg.KEY_QUERY_VALUE¶ Требуется для запроса значения раздела реестра.
-
winreg.KEY_SET_VALUE¶ Требуется для создания, удаления или установки значение реестра.
-
winreg.KEY_CREATE_SUB_KEY¶ Требуется для создания подраздела раздела реестра.
-
winreg.KEY_ENUMERATE_SUB_KEYS¶ Требуется для перечисления подразделов раздела реестра.
-
winreg.KEY_NOTIFY¶ Требуется для запроса уведомлений об изменении раздела реестра или подразделов раздела реестра.
-
winreg.KEY_CREATE_LINK¶ Зарезервировано для использования в системе.
64-битная версия¶
Дополнительные сведения см. в разделе Доступ к альтернативному представлению реестра.
-
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-разрядное число в формате прямого порядка байт (little-endian). Эквивалентно
REG_DWORD.
-
winreg.REG_DWORD_BIG_ENDIAN¶ 32-разрядное число в формате обратного порядка байт (big-endian).
-
winreg.REG_EXPAND_SZ¶ Пустая строка, содержащая ссылки на переменные среды (
%PATH%).
-
winreg.REG_LINK¶ Символьная ссылка в Юникоде.
-
winreg.REG_MULTI_SZ¶ Последовательность пустых строки, завершенных двумя нулевыми символами. (Python обрабатывает это завершение автоматически.)
-
winreg.REG_NONE¶ Не определен тип значения.
-
winreg.REG_QWORD¶ 64-разрядное число.
Добавлено в версии 3.6.
-
winreg.REG_QWORD_LITTLE_ENDIAN¶ 64-разрядное число в формате прямого порядка байт (little-endian). Эквивалентно
REG_QWORD.Добавлено в версии 3.6.
-
winreg.REG_RESOURCE_LIST¶ Список ресурсов драйвера устройства.
-
winreg.REG_FULL_RESOURCE_DESCRIPTOR¶ Аппаратная настройка.
-
winreg.REG_RESOURCE_REQUIREMENTS_LIST¶ Список аппаратных ресурсов.
-
winreg.REG_SZ¶ Строка с завершающим нулем.
Дескриптор реестра объектов¶
Этот объект переносит объект Windows HKEY, автоматически закрывая его при
уничтожении. Для гарантии очистки можно вызвать метод Close() для объекта
или функцию CloseKey().
Все функции реестра в этом модуле возвращает один из этих объектов.
Все функции реестра в этом модуле, которые принимают объект дескриптора, также принимают целое число, однако использование объекта дескриптора рекомендуется.
Объекты-дескрипторы обеспечивают семантику для __bool__() - таким образом:
if handle:
print("Yes")
будет печатать Yes, если дескриптор в настоящее время действителен (не
был закрыт или отсоединен).
Объект также поддерживает семантику сравнения, поэтому объекты-дескрипторы будут сравнивать true, если они оба ссылаются на один и тот же базовый дескриптор Windows значение.
Объекты-дескрипторы могут быть преобразованы в целое число (например, с помощью
встроенной функции int()), в этом случае основной значение дескрипторов
Windows будет возвращенный. Можно также использовать метод Detach() для
возвращает целочисленного дескриптора, а также отсоединить дескриптор Windows от
объекта дескриптора.
-
PyHKEY.Close()¶ Закрывает базовый дескриптор Windows.
Если дескриптор уже закрыт, ошибка не возникает.
-
PyHKEY.Detach()¶ Отсоединяет дескриптор Windows от объекта дескриптора.
Результатом является целое число, которое удерживает значение дескриптора перед его отсоединением. Если дескриптор уже отсоединен или закрыт, он Возвращает нулевым.
После вызова этой функции дескриптор фактически становится недействительным, но не закрывается. Эту функцию можно вызвать, если необходимо, чтобы базовый дескриптор Win32 существовал после срока существования объекта-дескриптора.
Raises an auditing event
winreg.PyHKEY.Detachwith argumentkey.
-
PyHKEY.__enter__()¶ -
PyHKEY.__exit__(*exc_info)¶ Объект HKEY реализует
__enter__()и__exit__()и таким образом поддерживает протокол контекст для инструкцииwith:with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key: ... # работа с ключом
автоматически закрывается key когда элемент управления выходит из блока
with.
