Документация Python неофициальный перевод

winreg.md

502 строк · 38.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.2/library/winreg.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 32.3. [`winreg`](https://python-all.ru/3.2/library/winreg.html#module-winreg) – доступ к реестру Windows89*Платформы:* Windows1011Эти функции предоставляют доступ к API реестра Windows из Python. Вместо использования целого числа в качестве дескриптора реестра используется [*объект-дескриптор*](https://python-all.ru/3.2/library/winreg.html#handle-object), чтобы гарантировать корректное закрытие дескрипторов, даже если программист забудет явно закрыть их.1213Этот модуль предоставляет следующие функции:1415#### `winreg.CloseKey(hkey)`1617Закрывает ранее открытый ключ реестра. Аргумент *hkey* указывает ранее открытый ключ.1819> **Примечание**20>21> Если *hkey* не закрыт с помощью этого метода (или через [`hkey.Close()`](https://python-all.ru/3.2/library/winreg.html#winreg.PyHKEY.Close)), он закрывается, когда объект *hkey* уничтожается Python.2223#### `winreg.ConnectRegistry(computer_name, key)`2425Устанавливает соединение с предопределенным дескриптором реестра на другом компьютере и возвращает [*объект-дескриптор*](https://python-all.ru/3.2/library/winreg.html#handle-object).2627*computer\_name* – имя удаленного компьютера, вида `r"\\computername"`. Если указано `None`, используется локальный компьютер.2829*key* – это предопределенный дескриптор для подключения.3031Возвращаемое значение – дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError).3233#### `winreg.CreateKey(key, sub_key)`3435Создает или открывает указанный ключ, возвращая [*объект-дескриптор*](https://python-all.ru/3.2/library/winreg.html#handle-object).3637*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).3839*sub\_key* – это строка, задающая имя ключа, который открывает или создает этот метод.4041Если *key* является одним из предопределенных ключей, *sub\_key* может быть `None`. В этом случае возвращаемый дескриптор – это тот же дескриптор ключа, который был передан в функцию.4243Если ключ уже существует, эта функция открывает существующий ключ.4445Возвращаемое значение – дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError).4647#### `winreg.CreateKeyEx(key, sub_key, reserved=0, access=KEY_WRITE)`4849Создает или открывает указанный ключ, возвращая [*объект-дескриптор*](https://python-all.ru/3.2/library/winreg.html#handle-object).5051*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).5253*sub\_key* – это строка, задающая имя ключа, который открывает или создает этот метод.5455*reserved* – это зарезервированное целое число, которое должно быть равно нулю. По умолчанию – ноль.5657*access* – целое число, задающее маску доступа, которая описывает требуемый уровень безопасности для ключа. По умолчанию [`KEY_WRITE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_WRITE). Другие допустимые значения см. в разделе [*Access Rights*](https://python-all.ru/3.2/library/winreg.html#access-rights).5859Если *key* является одним из предопределенных ключей, *sub\_key* может быть `None`. В этом случае возвращаемый дескриптор – это тот же дескриптор ключа, который был передан в функцию.6061Если ключ уже существует, эта функция открывает существующий ключ.6263Возвращаемое значение – дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError).6465Новое в версии 3.2.6667#### `winreg.DeleteKey(key, sub_key)`6869Удаляет указанный ключ.7071*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).7273*sub\_key* – строка, которая должна быть подразделом ключа, заданного параметром *key*. Это значение не должно быть `None`, и ключ не должен иметь вложенных подразделов.7475*Этот метод не может удалять ключи, содержащие подразделы.*7677В случае успеха метода удаляется весь ключ, включая все его значения. Если метод завершается с ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError).7879#### `winreg.DeleteKeyEx(key, sub_key, access=KEY_WOW64_64KEY, reserved=0)`8081Удаляет указанный ключ.8283> **Примечание**84>85> Функция [`DeleteKeyEx()`](https://python-all.ru/3.2/library/winreg.html#winreg.DeleteKeyEx) реализована с помощью функции RegDeleteKeyEx из Windows API, которая специфична для 64-разрядных версий Windows. См. документацию по [RegDeleteKeyEx](https://python-all.ru/3.2/library/winreg.html).8687*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).8889*sub\_key* – строка, которая должна быть подразделом ключа, заданного параметром *key*. Это значение не должно быть `None`, и ключ не должен иметь вложенных подразделов.9091*reserved* – это зарезервированное целое число, которое должно быть равно нулю. По умолчанию – ноль.9293*access* – целое число, задающее маску доступа, которая определяет требуемый уровень безопасности для ключа. По умолчанию [`KEY_ALL_ACCESS`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_ALL_ACCESS). Другие допустимые значения см. в [*Access Rights*](https://python-all.ru/3.2/library/winreg.html#access-rights).9495*Этот метод не может удалять ключи, содержащие подразделы.*9697Если метод успешно выполняется, удаляется весь ключ, включая все его значения. Если метод завершается с ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError).9899В неподдерживаемых версиях Windows вызывается [`NotImplementedError`](https://python-all.ru/3.2/library/exceptions.html#NotImplementedError).100101Новое в версии 3.2.102103#### `winreg.DeleteValue(key, value)`104105Удаляет именованное значение из ключа реестра.106107*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).108109*value* – это строка, определяющая значение, которое нужно удалить.110111#### `winreg.EnumKey(key, index)`112113Перечисляет подразделы открытого ключа реестра, возвращая строку.114115*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).116117*index* – это целое число, определяющее индекс извлекаемого ключа.118119Функция при каждом вызове получает имя одного подключа. Обычно её вызывают многократно, пока не будет возбуждено исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError), указывающее, что данные закончились.120121#### `winreg.EnumValue(key, index)`122123Перечисляет значения открытого ключа реестра, возвращая кортеж.124125*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).126127*index* – это целое число, определяющее индекс извлекаемого значения.128129Функция при каждом вызове получает имя одного подключа. Обычно её вызывают многократно, пока не будет возбуждено исключение [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError), указывающее, что больше нет значений.130131Результат – кортеж из 3 элементов:132133| Индекс | Значение |134| --- | --- |135| `0` | Строка, идентифицирующая имя значения. |136| `1` | Объект, содержащий данные значения, и его тип зависит от базового типа раздела реестра. |137| `2` | Целое число, определяющее тип данных значения (см. таблицу в документации [`SetValueEx()`](https://python-all.ru/3.2/library/winreg.html#winreg.SetValueEx)). |138139#### `winreg.ExpandEnvironmentStrings(str)`140141Разворачивает заполнители переменных среды `%NAME%` в строках типа [`REG_EXPAND_SZ`](https://python-all.ru/3.2/library/winreg.html#winreg.REG_EXPAND_SZ):142143```python144>>> ExpandEnvironmentStrings('%windir%')145'C:\\Windows'146```147148#### `winreg.FlushKey(key)`149150Записывает все атрибуты раздела в реестр.151152*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).153154Необязательно вызывать [`FlushKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.FlushKey) для изменения ключа. Изменения в реестре сбрасываются на диск реестром с помощью его отложенного сброса (lazy flusher). Изменения в реестре также сбрасываются на диск при завершении работы системы. В отличие от [`CloseKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.CloseKey), метод [`FlushKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.FlushKey) возвращает управление только после того, как все данные будут записаны в реестр. Приложение должно вызывать [`FlushKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.FlushKey) только если ему нужна абсолютная уверенность, что изменения в реестре записаны на диск.155156> **Примечание**157>158> Если нет уверенности, требуется ли вызов [`FlushKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.FlushKey), то, скорее всего, он не требуется.159160#### `winreg.LoadKey(key, sub_key, file_name)`161162Создаёт подраздел в указанном разделе и сохраняет информацию реестра из указанного файла в этот подраздел.163164*key* is a handle returned by [`ConnectRegistry()`](https://python-all.ru/3.2/library/winreg.html#winreg.ConnectRegistry) or one of the constants [`HKEY_USERS`](https://python-all.ru/3.2/library/winreg.html#winreg.HKEY_USERS) or [`HKEY_LOCAL_MACHINE`](https://python-all.ru/3.2/library/winreg.html#winreg.HKEY_LOCAL_MACHINE).165166*sub\_key* – это строка, идентифицирующая загружаемый подраздел.167168*file\_name* – это имя файла, из которого загружаются данные реестра. Этот файл должен быть создан функцией [`SaveKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.SaveKey). В файловой системе FAT (file allocation table) имя файла не может содержать расширение.169170Вызов [`LoadKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.LoadKey) завершается неудачей, если вызывающий процесс не имеет привилегии `SE_RESTORE_PRIVILEGE`. Обратите внимание, что привилегии отличаются от разрешений – см. [документацию по RegLoadKey](https://python-all.ru/3.2/library/winreg.html) для получения дополнительных сведений.171172Если *key* – это дескриптор, возвращаемый [`ConnectRegistry()`](https://python-all.ru/3.2/library/winreg.html#winreg.ConnectRegistry), то путь, указанный в *file\_name*, является относительным для удалённого компьютера.173174#### `winreg.OpenKey(key, sub_key, reserved=0, access=KEY_READ)`175176#### `winreg.OpenKeyEx(key, sub_key, reserved=0, access=KEY_READ)`177178Открывает указанный раздел и возвращает [*объект-дескриптор*](https://python-all.ru/3.2/library/winreg.html#handle-object).179180*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).181182*sub\_key* – это строка, идентифицирующая открываемый подраздел.183184*reserved* – зарезервированное целое число, должно быть равно нулю. Значение по умолчанию – ноль.185186*access* – целое число, задающее маску доступа, описывающую требуемый уровень безопасности для ключа. По умолчанию используется [`KEY_READ`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_READ). См. [*Access Rights*](https://python-all.ru/3.2/library/winreg.html#access-rights) для других допустимых значений.187188Результат – новый дескриптор указанного раздела.189190Если функция завершается ошибкой, возбуждается [`WindowsError`](https://python-all.ru/3.2/library/exceptions.html#WindowsError).191192Изменено в версии 3.2: Разрешено использование именованных аргументов.193194#### `winreg.QueryInfoKey(key)`195196Возвращает информацию о разделе в виде кортежа.197198*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).199200Результат – кортеж из 3 элементов:201202| Индекс | Значение |203| --- | --- |204| `0` | Целое число, указывающее количество подразделов, которые есть у этого раздела. |205| `1` | Целое число, указывающее количество значений, которые есть у этого раздела. |206| `2` | Целое число, указывающее время последнего изменения ключа (если доступно), в сотнях наносекунд с 1 января 1600 года. |207208#### `winreg.QueryValue(key, sub_key)`209210Извлекает безымянное значение для раздела в виде строки.211212*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).213214*sub\_key* – это строка, содержащая имя подключа, с которым связано значение. Если этот параметр равен `None` или пуст, функция извлекает значение, установленное методом [`SetValue()`](https://python-all.ru/3.2/library/winreg.html#winreg.SetValue) для ключа, заданного *key*.215216Значения в реестре имеют компоненты: имя, тип и данные. Этот метод извлекает данные для первого значения ключа, имеющего имя NULL. Однако базовый вызов API не возвращает тип, поэтому всегда следует использовать [`QueryValueEx()`](https://python-all.ru/3.2/library/winreg.html#winreg.QueryValueEx), если это возможно.217218#### `winreg.QueryValueEx(key, value_name)`219220Извлекает тип и данные для указанного имени значения, связанного с открытым разделом реестра.221222*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).223224*value\_name* – строка, указывающая имя запрашиваемого значения.225226Результат – кортеж из 2 элементов:227228| Индекс | Значение |229| --- | --- |230| `0` | Значение элемента реестра. |231| `1` | Целое число, задающее тип реестра для этого значения (см. таблицу в документации для [`SetValueEx()`](https://python-all.ru/3.2/library/winreg.html#winreg.SetValueEx)) |232233#### `winreg.SaveKey(key, file_name)`234235Сохраняет указанный раздел и все его подразделы в указанный файл.236237*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).238239*file\_name* – это имя файла, в который будут сохранены данные реестра. Этот файл не должен существовать. Если имя файла содержит расширение, его нельзя использовать в файловых системах FAT (file allocation table) с помощью метода [`LoadKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.LoadKey).240241Если *key* представляет ключ на удалённом компьютере, путь, описанный в *file\_name*, является относительным для этого удалённого компьютера. Вызывающий этот метод должен обладать привилегией безопасности `SeBackupPrivilege`. Обратите внимание, что привилегии отличаются от разрешений – см. [документацию Conflicts Between User Rights and Permissions](https://python-all.ru/3.2/library/winreg.html) для получения дополнительных сведений.242243Эта функция передаёт NULL для *security\_attributes* в API.244245#### `winreg.SetValue(key, sub_key, type, value)`246247Связывает значение с указанным разделом.248249*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).250251*sub\_key* – строка, задающая имя подраздела, с которым связывается значение.252253*type* – целое число, указывающее тип данных. В настоящее время это должно быть [`REG_SZ`](https://python-all.ru/3.2/library/winreg.html#winreg.REG_SZ), то есть поддерживаются только строки. Используйте функцию [`SetValueEx()`](https://python-all.ru/3.2/library/winreg.html#winreg.SetValueEx) для поддержки других типов данных.254255*value* – это строка, задающая новое значение.256257Если раздел, указанный параметром *sub\_key*, не существует, функция SetValue создаёт его.258259Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в виде файлов, имена которых сохраняются в конфигурационном реестре. Это помогает реестру работать эффективно.260261Ключ, заданный параметром *key*, должен быть открыт с доступом [`KEY_SET_VALUE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_SET_VALUE).262263#### `winreg.SetValueEx(key, value_name, reserved, type, value)`264265Сохраняет данные в поле значения открытого ключа реестра.266267*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).268269*value\_name* – это строка, задающая имя подключа, с которым связано значение.270271*reserved* может быть любым – в API всегда передаётся ноль.272273*type* – это целое число, задающее тип данных. Смотрите [*Value Types*](https://python-all.ru/3.2/library/winreg.html#value-types) для получения списка доступных типов.274275*value* – это строка, задающая новое значение.276277Этот метод также может задавать дополнительную информацию о значении и типе для указанного ключа. Ключ, заданный параметром key, должен быть открыт с доступом [`KEY_SET_VALUE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_SET_VALUE).278279Чтобы открыть ключ, используйте методы [`CreateKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.CreateKey) или [`OpenKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.OpenKey).280281Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в виде файлов, имена которых сохраняются в конфигурационном реестре. Это помогает реестру работать эффективно.282283#### `winreg.DisableReflectionKey(key)`284285Отключает отражение реестра для 32-разрядных процессов, работающих в 64-разрядной операционной системе.286287*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).288289Обычно возбуждает исключение [`NotImplemented`](https://python-all.ru/3.2/library/constants.html#NotImplemented), если выполняется в 32-разрядной операционной системе.290291Если ключ отсутствует в списке отражения, функция выполняется успешно, но не оказывает никакого эффекта. Отключение отражения для ключа не влияет на отражение каких-либо подключачей.292293#### `winreg.EnableReflectionKey(key)`294295Восстанавливает отражение реестра для указанного отключённого ключа.296297*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).298299Обычно возбуждает исключение [`NotImplemented`](https://python-all.ru/3.2/library/constants.html#NotImplemented), если выполняется в 32-разрядной операционной системе.300301Восстановление отражения для ключа не влияет на отражение каких-либо подключачей.302303#### `winreg.QueryReflectionKey(key)`304305Определяет состояние отражения для указанного ключа.306307*key* – это уже открытый ключ или одна из предопределённых [*констант HKEY\_\**](https://python-all.ru/3.2/library/winreg.html#hkey-constants).308309Возвращает `True`, если отражение отключено.310311Обычно вызывает [`NotImplemented`](https://python-all.ru/3.2/library/constants.html#NotImplemented) при выполнении в 32-разрядной операционной системе.312313## 32.3.1. Константы314315Следующие константы определены для использования во многих функциях `_winreg`.316317### 32.3.1.1. Константы HKEY\_\*318319#### `winreg.HKEY_CLASSES_ROOT`320321Записи реестра, подчинённые этому ключу, определяют типы (или классы) документов и свойства, связанные с этими типами. Оболочка и COM-приложения используют информацию, хранящуюся в этом ключе.322323#### `winreg.HKEY_CURRENT_USER`324325Записи реестра, подчинённые этому ключу, определяют настройки текущего пользователя. Эти настройки включают параметры переменных среды, данные о группах программ, цветах, принтерах, сетевых подключениях и настройках приложений.326327#### `winreg.HKEY_LOCAL_MACHINE`328329Записи реестра, подчинённые этому ключу, определяют физическое состояние компьютера, включая данные о типе шины, системной памяти и установленном оборудовании и программном обеспечении.330331#### `winreg.HKEY_USERS`332333Записи реестра, подчинённые этому ключу, определяют конфигурацию пользователя по умолчанию для новых пользователей локального компьютера и конфигурацию для текущего пользователя.334335#### `winreg.HKEY_PERFORMANCE_DATA`336337Записи реестра, подчинённые этому ключу, позволяют получить доступ к данным производительности. На самом деле эти данные не хранятся в реестре; функции реестра заставляют систему собирать их из источника.338339#### `winreg.HKEY_CURRENT_CONFIG`340341Содержит информацию о текущем профиле оборудования локальной компьютерной системы.342343#### `winreg.HKEY_DYN_DATA`344345Этот ключ не используется в версиях Windows после 98.346347### 32.3.1.2. Права доступа348349За дополнительными сведениями см. [Безопасность и доступ к ключам реестра](https://python-all.ru/3.2/library/winreg.html).350351#### `winreg.KEY_ALL_ACCESS`352353Объединяет права доступа STANDARD\_RIGHTS\_REQUIRED, [`KEY_QUERY_VALUE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_QUERY_VALUE), [`KEY_SET_VALUE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_SET_VALUE), [`KEY_CREATE_SUB_KEY`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_CREATE_SUB_KEY), [`KEY_ENUMERATE_SUB_KEYS`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_ENUMERATE_SUB_KEYS), [`KEY_NOTIFY`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_NOTIFY) и [`KEY_CREATE_LINK`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_CREATE_LINK).354355#### `winreg.KEY_WRITE`356357Объединяет права доступа STANDARD\_RIGHTS\_WRITE, [`KEY_SET_VALUE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_SET_VALUE) и [`KEY_CREATE_SUB_KEY`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_CREATE_SUB_KEY).358359#### `winreg.KEY_READ`360361Объединяет значения STANDARD\_RIGHTS\_READ, [`KEY_QUERY_VALUE`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_QUERY_VALUE), [`KEY_ENUMERATE_SUB_KEYS`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_ENUMERATE_SUB_KEYS) и [`KEY_NOTIFY`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_NOTIFY).362363#### `winreg.KEY_EXECUTE`364365Эквивалентно [`KEY_READ`](https://python-all.ru/3.2/library/winreg.html#winreg.KEY_READ).366367#### `winreg.KEY_QUERY_VALUE`368369Требуется для запроса значений ключа реестра.370371#### `winreg.KEY_SET_VALUE`372373Требуется для создания, удаления или установки значения реестра.374375#### `winreg.KEY_CREATE_SUB_KEY`376377Требуется для создания вложенного ключа реестра.378379#### `winreg.KEY_ENUMERATE_SUB_KEYS`380381Требуется для перечисления вложенных ключей реестра.382383#### `winreg.KEY_NOTIFY`384385Требуется для запроса уведомлений об изменениях для ключа реестра или для его вложенных ключей.386387#### `winreg.KEY_CREATE_LINK`388389Зарезервировано для использования системой.390391#### 32.3.1.2.1. 64-битная специфика392393За дополнительными сведениями см. [Доступ к альтернативному представлению реестра](https://python-all.ru/3.2/library/winreg.html).394395#### `winreg.KEY_WOW64_64KEY`396397Указывает, что приложение в 64-разрядной Windows должно работать с 64-разрядным представлением реестра.398399#### `winreg.KEY_WOW64_32KEY`400401Указывает, что приложение в 64-разрядной Windows должно работать с 32-разрядным представлением реестра.402403### 32.3.1.3. Типы значений404405Для получения дополнительной информации см. [Типы значений реестра](https://python-all.ru/3.2/library/winreg.html).406407#### `winreg.REG_BINARY`408409Двоичные данные в любом виде.410411#### `winreg.REG_DWORD`41241332-разрядное число.414415#### `winreg.REG_DWORD_LITTLE_ENDIAN`41641732-разрядное число в формате little-endian.418419#### `winreg.REG_DWORD_BIG_ENDIAN`42042132-разрядное число в формате big-endian.422423#### `winreg.REG_EXPAND_SZ`424425Строка, завершающаяся нулевым символом, содержащая ссылки на переменные окружения (`%PATH%`).426427#### `winreg.REG_LINK`428429Символическая ссылка в Юникоде.430431#### `winreg.REG_MULTI_SZ`432433Последовательность строк, завершающихся нулевым символом, оканчивающаяся двумя нулевыми символами. (Python обрабатывает это завершение автоматически.)434435#### `winreg.REG_NONE`436437Неопределённый тип значения.438439#### `winreg.REG_RESOURCE_LIST`440441Список ресурсов драйвера устройства.442443#### `winreg.REG_FULL_RESOURCE_DESCRIPTOR`444445Параметр оборудования.446447#### `winreg.REG_RESOURCE_REQUIREMENTS_LIST`448449Список аппаратных ресурсов.450451#### `winreg.REG_SZ`452453Нуль-терминированная строка.454455## 32.3.2. Объекты дескрипторов реестра456457Этот объект оборачивает объект Windows HKEY, автоматически закрывая его при уничтожении объекта. Чтобы гарантировать очистку, можно вызвать либо метод [`Close()`](https://python-all.ru/3.2/library/winreg.html#winreg.PyHKEY.Close) у объекта, либо функцию [`CloseKey()`](https://python-all.ru/3.2/library/winreg.html#winreg.CloseKey).458459Все функции реестра в этом модуле возвращают один из таких объектов.460461Все функции реестра в этом модуле, которые принимают объект дескриптора, также принимают целое число, однако рекомендуется использовать объект дескриптора.462463Объекты дескрипторов реализуют семантику [`__bool__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__bool__) – таким образом464465```python466if handle:467    print("Yes")468```469470будет выведено `Yes`, если дескриптор в текущий момент действителен (не был закрыт или отсоединён).471472Объект также поддерживает семантику сравнения, поэтому объекты дескрипторов будут сравниваться как равные, если оба ссылаются на одно и то же значение базового дескриптора Windows.473474Объекты дескрипторов можно преобразовать в целое число (например, с помощью встроенной функции [`int()`](https://python-all.ru/3.2/library/functions.html#int)), в этом случае возвращается значение базового дескриптора Windows. Также можно использовать метод [`Detach()`](https://python-all.ru/3.2/library/winreg.html#winreg.PyHKEY.Detach), чтобы вернуть целочисленный дескриптор и отсоединить дескриптор Windows от объекта дескриптора.475476#### `PyHKEY.Close()`477478Закрывает соответствующий дескриптор Windows.479480Если дескриптор уже закрыт, ошибка не возникает.481482#### `PyHKEY.Detach()`483484Отсоединяет дескриптор Windows от объекта дескриптора.485486Результат – целое число, содержащее значение дескриптора до его отсоединения. Если дескриптор уже отсоединён или закрыт, возвращается ноль.487488После вызова этой функции дескриптор фактически становится недействительным, но не закрывается. Эту функцию следует вызывать, когда требуется, чтобы базовый дескриптор Win32 существовал дольше, чем объект дескриптора.489490#### `PyHKEY.__enter__()`491492#### `PyHKEY.__exit__(*exc_info)`493494Объект HKEY реализует [`__enter__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__exit__), и таким образом поддерживает протокол контекста для оператора [`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with):495496```python497with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:498    ...  # работа с ключом499```500501автоматически закроет *key*, когда управление покинет блок [`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with).502