_winreg.md
1> **Источник:** https://python-all.ru/2.7/library/_winreg.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 35.3. [`_winreg`](https://python-all.ru/2.7/library/_winreg.html#module-_winreg) – доступ к реестру Windows89> **Примечание**10>11> Модуль [`_winreg`](https://python-all.ru/2.7/library/_winreg.html#module-_winreg) был переименован в `winreg` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходного кода в Python 3.1213Новое в версии 2.0.1415Эти функции предоставляют доступ к API реестра Windows из Python. Вместо использования целого числа в качестве дескриптора реестра используется [объект-дескриптор](https://python-all.ru/2.7/library/_winreg.html#handle-object), чтобы гарантировать корректное закрытие дескрипторов, даже если программист забудет явно закрыть их.1617Этот модуль предоставляет следующие функции:1819#### `_winreg.CloseKey(hkey)`2021Закрывает ранее открытый ключ реестра. Аргумент *hkey* указывает ранее открытый ключ.2223> **Примечание**24>25> Если *hkey* не закрыт с помощью этого метода (или через [`hkey.Close()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.PyHKEY.Close)), он закрывается при уничтожении объекта *hkey* интерпретатором Python.2627#### `_winreg.ConnectRegistry(computer_name, key)`2829Устанавливает соединение с предопределенным дескриптором реестра на другом компьютере и возвращает [объект-дескриптор](https://python-all.ru/2.7/library/_winreg.html#handle-object).3031*computer\_name* – это имя удаленного компьютера в формате `r"\\computername"`. Если `None`, используется локальный компьютер.3233*key* – это предопределенный дескриптор для подключения.3435Возвращаемое значение – это дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError).3637#### `_winreg.CreateKey(key, sub_key)`3839Создает или открывает указанный ключ, возвращая [объект-дескриптор](https://python-all.ru/2.7/library/_winreg.html#handle-object).4041*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).4243*sub\_key* – это строка, задающая имя ключа, который открывает или создает этот метод.4445Если *key* – один из предопределенных ключей, *sub\_key* может быть `None`. В этом случае возвращаемый дескриптор совпадает с дескриптором ключа, переданным в функцию.4647Если ключ уже существует, эта функция открывает существующий ключ.4849Возвращаемое значение – это дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError).5051#### `_winreg.CreateKeyEx(key, sub_key[, res[, sam]])`5253Создает или открывает указанный ключ, возвращая [объект-дескриптор](https://python-all.ru/2.7/library/_winreg.html#handle-object).5455*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).5657*sub\_key* – это строка, задающая имя ключа, который открывает или создает этот метод.5859*res* – зарезервированное целое число, должно быть равно нулю. По умолчанию – ноль.6061*sam* – целое число, задающее маску доступа, описывающую требуемые права доступа для ключа. По умолчанию: [`KEY_ALL_ACCESS`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_ALL_ACCESS). Другие допустимые значения см. в [Access Rights](https://python-all.ru/2.7/library/_winreg.html#access-rights).6263Если *key* – один из предопределенных ключей, *sub\_key* может быть `None`. В этом случае возвращаемый дескриптор совпадает с дескриптором ключа, переданным в функцию.6465Если ключ уже существует, эта функция открывает существующий ключ.6667Возвращаемое значение – это дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError).6869Новое в версии 2.7.7071#### `_winreg.DeleteKey(key, sub_key)`7273Удаляет указанный ключ.7475*key* – это уже открытый ключ или одна из предопределённых констант [HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).7677*sub\_key* – это строка, которая должна быть подразделом ключа, идентифицированного *key* параметром. Это значение не должно быть `None`, и ключ не может содержать подразделы.7879*Этот метод не может удалять ключи, содержащие подразделы.*8081В случае успеха метода удаляется весь ключ, включая все его значения. При ошибке возбуждается исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError).8283#### `_winreg.DeleteKeyEx(key, sub_key[, sam[, res]])`8485Удаляет указанный ключ.8687> **Примечание**88>89> Функция [`DeleteKeyEx()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.DeleteKeyEx) реализована с помощью API-функции Windows RegDeleteKeyEx, которая характерна для 64-разрядных версий Windows. См. [документацию по RegDeleteKeyEx](https://python-all.ru/2.7/library/_winreg.html).9091*key* – это уже открытый ключ или одна из предопределённых констант [HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).9293*sub\_key* – это строка, которая должна быть подразделом ключа, идентифицированного *key* параметром. Это значение не должно быть `None`, и ключ не может иметь подразделы.9495*res* – зарезервированное целое число, должно быть равно нулю. По умолчанию – ноль.9697*sam* – целое число, задающее маску доступа, описывающую требуемые права доступа для ключа. По умолчанию: [`KEY_WOW64_64KEY`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_WOW64_64KEY). Другие допустимые значения см. в [Access Rights](https://python-all.ru/2.7/library/_winreg.html#access-rights).9899*Этот метод не может удалять ключи, содержащие подразделы.*100101В случае успеха метода удаляется весь ключ, включая все его значения. При ошибке возбуждается исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError).102103В неподдерживаемых версиях Windows возбуждается исключение [`NotImplementedError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.NotImplementedError).104105Новое в версии 2.7.106107#### `_winreg.DeleteValue(key, value)`108109Удаляет именованное значение из ключа реестра.110111*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).112113*value* – это строка, определяющая значение, которое нужно удалить.114115#### `_winreg.EnumKey(key, index)`116117Перечисляет подразделы открытого ключа реестра, возвращая строку.118119*key* – это уже открытый ключ или одна из предопределённых констант [HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).120121*index* – это целое число, определяющее индекс извлекаемого ключа.122123Функция при каждом вызове возвращает имя одного подключа. Обычно она вызывается повторно до тех пор, пока не возникнет исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError), означающее, что больше значений нет.124125#### `_winreg.EnumValue(key, index)`126127Перечисляет значения открытого ключа реестра, возвращая кортеж.128129*key* – это уже открытый ключ или одна из предопределённых констант [HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).130131*index* – это целое число, определяющее индекс извлекаемого значения.132133Функция при каждом вызове возвращает имя одного подключа. Обычно она вызывается повторно, пока не возникнет исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError), означающее, что значения закончились.134135Результат – кортеж из 3 элементов:136137| Индекс | Значение |138| --- | --- |139| `0` | Строка, идентифицирующая имя значения. |140| `1` | Объект, содержащий данные значения, и его тип зависит от базового типа раздела реестра. |141| `2` | Целое число, идентифицирующее тип данных значения (см. таблицу в документации для [`SetValueEx()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.SetValueEx)). |142143#### `_winreg.ExpandEnvironmentStrings(unicode)`144145Заменяет заполнители переменных окружения `%NAME%` в строках Unicode, например [`REG_EXPAND_SZ`](https://python-all.ru/2.7/library/_winreg.html#_winreg.REG_EXPAND_SZ):146147```python148>>> ExpandEnvironmentStrings(u"%windir%")149u"C:\\Windows"150```151152Новое в версии 2.6.153154#### `_winreg.FlushKey(key)`155156Записывает все атрибуты раздела в реестр.157158*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).159160Вызов [`FlushKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.FlushKey) для изменения раздела не обязателен. Изменения в реестре сбрасываются на диск самим реестром с помощью его отложенного сброса (lazy flusher). Изменения в реестре также сбрасываются на диск при завершении работы системы. В отличие от [`CloseKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.CloseKey), метод [`FlushKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.FlushKey) возвращает управление только после записи всех данных в реестр. Приложение должно вызывать [`FlushKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.FlushKey) только в случае, если требуется абсолютная уверенность, что изменения в реестре находятся на диске.161162> **Примечание**163>164> Если нет уверенности, требуется ли вызов [`FlushKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.FlushKey), скорее всего, он не требуется.165166#### `_winreg.LoadKey(key, sub_key, file_name)`167168Создаёт подраздел в указанном разделе и сохраняет информацию реестра из указанного файла в этот подраздел.169170*key* – это дескриптор, возвращённый [`ConnectRegistry()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.ConnectRegistry), или одна из констант [`HKEY_USERS`](https://python-all.ru/2.7/library/_winreg.html#_winreg.HKEY_USERS) или [`HKEY_LOCAL_MACHINE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.HKEY_LOCAL_MACHINE).171172*sub\_key* – это строка, идентифицирующая загружаемый подраздел.173174*file\_name* – это имя файла, из которого загружаются данные реестра. Этот файл должен быть создан с помощью функции [`SaveKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.SaveKey). В файловой системе FAT имя файла может не иметь расширения.175176Вызов [`LoadKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.LoadKey) завершается ошибкой, если вызывающий процесс не имеет привилегии `SE_RESTORE_PRIVILEGE`. Обратите внимание, что привилегии отличаются от прав доступа – см. [документацию RegLoadKey](https://python-all.ru/2.7/library/_winreg.html) для подробностей.177178Если *key* – это дескриптор, возвращённый [`ConnectRegistry()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.ConnectRegistry), то путь, указанный в *file\_name*, считается относительно удалённого компьютера.179180#### `_winreg.OpenKey(key, sub_key[, res[, sam]])`181182Открывает указанный раздел и возвращает [объект-дескриптор](https://python-all.ru/2.7/library/_winreg.html#handle-object).183184*key* – это уже открытый ключ или одна из предопределённых констант [HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).185186*sub\_key* – это строка, идентифицирующая открываемый подраздел.187188*res* – зарезервированное целое число, должно быть равно нулю. По умолчанию – ноль.189190*sam* – целое число, задающее маску доступа, описывающую требуемые права доступа для ключа. По умолчанию: [`KEY_READ`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_READ). Другие допустимые значения см. в [Access Rights](https://python-all.ru/2.7/library/_winreg.html#access-rights).191192Результат – новый дескриптор указанного раздела.193194Если функция завершается ошибкой, возбуждается исключение [`WindowsError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.WindowsError).195196#### `_winreg.OpenKeyEx()`197198Функциональность [`OpenKeyEx()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.OpenKeyEx) предоставляется через [`OpenKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.OpenKey), с использованием аргументов по умолчанию.199200#### `_winreg.QueryInfoKey(key)`201202Возвращает информацию о разделе в виде кортежа.203204*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).205206Результат – кортеж из 3 элементов:207208| Индекс | Значение |209| --- | --- |210| `0` | Целое число, указывающее количество подразделов, которые есть у этого раздела. |211| `1` | Целое число, указывающее количество значений, которые есть у этого раздела. |212| `2` | Длинное целое число, указывающее, когда ключ был последний раз изменён (если доступно), в сотнях наносекунд с 1 января 1601 года. |213214#### `_winreg.QueryValue(key, sub_key)`215216Извлекает безымянное значение для раздела в виде строки.217218*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).219220*sub\_key* – строка, содержащая имя подраздела, с которым связано значение. Если этот параметр равен `None` или пустой строке, функция извлекает значение, заданное методом [`SetValue()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.SetValue) для раздела, указанного в *key*.221222Значения в реестре состоят из имени, типа и данных. Этот метод извлекает данные для первого значения ключа с пустым именем (NULL). Но соответствующий вызов API не возвращает тип, поэтому всегда используйте [`QueryValueEx()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.QueryValueEx), если возможно.223224#### `_winreg.QueryValueEx(key, value_name)`225226Извлекает тип и данные для указанного имени значения, связанного с открытым разделом реестра.227228*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).229230*value\_name* – строка, указывающая имя запрашиваемого значения.231232Результат – кортеж из 2 элементов:233234| Индекс | Значение |235| --- | --- |236| `0` | Значение элемента реестра. |237| `1` | Целое число, указывающее тип реестра для этого значения (см. таблицу в документации для [`SetValueEx()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.SetValueEx)) |238239#### `_winreg.SaveKey(key, file_name)`240241Сохраняет указанный раздел и все его подразделы в указанный файл.242243*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).244245*file\_name* – имя файла для сохранения данных реестра. Этот файл не должен существовать. Если имя файла содержит расширение, его нельзя использовать в файловых системах FAT с методом [`LoadKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.LoadKey).246247Если *key* представляет ключ на удалённом компьютере, путь, указанный в *file\_name*, указывается относительно этого удалённого компьютера. Вызывающий этот метод должен обладать привилегией безопасности `SeBackupPrivilege`. Обратите внимание: привилегии отличаются от разрешений – подробнее см. в документации [«Конфликты между правами пользователей и разрешениями»](https://python-all.ru/2.7/library/_winreg.html).248249Эта функция передаёт NULL для *security\_attributes* в API.250251#### `_winreg.SetValue(key, sub_key, type, value)`252253Связывает значение с указанным разделом.254255*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).256257*sub\_key* – строка, задающая имя подраздела, с которым связывается значение.258259*type* – целое число, указывающее тип данных. В настоящее время это должно быть [`REG_SZ`](https://python-all.ru/2.7/library/_winreg.html#_winreg.REG_SZ), то есть поддерживаются только строки. Используйте функцию [`SetValueEx()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.SetValueEx) для поддержки других типов данных.260261*value* – это строка, задающая новое значение.262263Если раздел, указанный параметром *sub\_key*, не существует, функция SetValue создаёт его.264265Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в виде файлов, имена которых сохраняются в конфигурационном реестре. Это помогает реестру работать эффективно.266267Раздел, указанный параметром *key*, должен быть открыт с доступом [`KEY_SET_VALUE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_SET_VALUE).268269#### `_winreg.SetValueEx(key, value_name, reserved, type, value)`270271Сохраняет данные в поле значения открытого ключа реестра.272273*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).274275*value\_name* – это строка, задающая имя подключа, с которым связано значение.276277*type* – это целое число, задающее тип данных. Смотрите [Value Types](https://python-all.ru/2.7/library/_winreg.html#value-types) для получения списка доступных типов.278279*reserved* может быть любым – в API всегда передаётся ноль.280281*value* – это строка, задающая новое значение.282283Этот метод также может задавать дополнительную информацию о значении и типе для указанного ключа. Ключ, указанный параметром key, должен быть открыт с доступом [`KEY_SET_VALUE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_SET_VALUE).284285Чтобы открыть ключ, используйте методы [`CreateKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.CreateKey) или [`OpenKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.OpenKey).286287Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в виде файлов, имена которых сохраняются в конфигурационном реестре. Это помогает реестру работать эффективно.288289#### `_winreg.DisableReflectionKey(key)`290291Отключает отражение реестра для 32-разрядных процессов, работающих в 64-разрядной операционной системе.292293*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).294295Обычно вызывает [`NotImplementedError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.NotImplementedError) при выполнении в 32-разрядной операционной системе.296297Если ключ отсутствует в списке отражения, функция выполняется успешно, но не имеет эффекта. Отключение отражения для ключа не влияет на отражение любых подключей.298299#### `_winreg.EnableReflectionKey(key)`300301Восстанавливает отражение реестра для указанного отключённого ключа.302303*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).304305Обычно вызывает [`NotImplementedError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.NotImplementedError) при выполнении в 32-разрядной операционной системе.306307Восстановление отражения для ключа не влияет на отражение каких-либо подключачей.308309#### `_winreg.QueryReflectionKey(key)`310311Определяет состояние отражения для указанного ключа.312313*key* – это уже открытый ключ или одна из предопределённых [констант HKEY\_\*](https://python-all.ru/2.7/library/_winreg.html#hkey-constants).314315Возвращает `True`, если отражение отключено.316317Обычно вызывает [`NotImplementedError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.NotImplementedError) при выполнении в 32-разрядной операционной системе.318319## 35.3.1. Константы320321Следующие константы определены для использования во многих функциях [`_winreg`](https://python-all.ru/2.7/library/_winreg.html#module-_winreg).322323### 35.3.1.1. Константы HKEY\_\*324325#### `_winreg.HKEY_CLASSES_ROOT`326327Записи реестра, подчинённые этому ключу, определяют типы (или классы) документов и свойства, связанные с этими типами. Оболочка и COM-приложения используют информацию, хранящуюся в этом ключе.328329#### `_winreg.HKEY_CURRENT_USER`330331Записи реестра, подчинённые этому ключу, определяют настройки текущего пользователя. Эти настройки включают параметры переменных среды, данные о группах программ, цветах, принтерах, сетевых подключениях и настройках приложений.332333#### `_winreg.HKEY_LOCAL_MACHINE`334335Записи реестра, подчинённые этому ключу, определяют физическое состояние компьютера, включая данные о типе шины, системной памяти и установленном оборудовании и программном обеспечении.336337#### `_winreg.HKEY_USERS`338339Записи реестра, подчинённые этому ключу, определяют конфигурацию пользователя по умолчанию для новых пользователей локального компьютера и конфигурацию для текущего пользователя.340341#### `_winreg.HKEY_PERFORMANCE_DATA`342343Записи реестра, подчинённые этому ключу, позволяют получить доступ к данным производительности. На самом деле эти данные не хранятся в реестре; функции реестра заставляют систему собирать их из источника.344345#### `_winreg.HKEY_CURRENT_CONFIG`346347Содержит информацию о текущем профиле оборудования локальной компьютерной системы.348349#### `_winreg.HKEY_DYN_DATA`350351Этот ключ не используется в версиях Windows после 98.352353### 35.3.1.2. Права доступа354355За дополнительными сведениями см. [Безопасность и доступ к ключам реестра](https://python-all.ru/2.7/library/_winreg.html).356357#### `_winreg.KEY_ALL_ACCESS`358359Объединяет права доступа STANDARD\_RIGHTS\_REQUIRED, [`KEY_QUERY_VALUE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_QUERY_VALUE), [`KEY_SET_VALUE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_SET_VALUE), [`KEY_CREATE_SUB_KEY`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_CREATE_SUB_KEY), [`KEY_ENUMERATE_SUB_KEYS`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_ENUMERATE_SUB_KEYS), [`KEY_NOTIFY`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_NOTIFY) и [`KEY_CREATE_LINK`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_CREATE_LINK).360361#### `_winreg.KEY_WRITE`362363Объединяет права доступа STANDARD\_RIGHTS\_WRITE, [`KEY_SET_VALUE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_SET_VALUE) и [`KEY_CREATE_SUB_KEY`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_CREATE_SUB_KEY).364365#### `_winreg.KEY_READ`366367Combines the STANDARD\_RIGHTS\_READ, [`KEY_QUERY_VALUE`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_QUERY_VALUE), [`KEY_ENUMERATE_SUB_KEYS`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_ENUMERATE_SUB_KEYS), and [`KEY_NOTIFY`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_NOTIFY) values.368369#### `_winreg.KEY_EXECUTE`370371Эквивалентно [`KEY_READ`](https://python-all.ru/2.7/library/_winreg.html#_winreg.KEY_READ).372373#### `_winreg.KEY_QUERY_VALUE`374375Требуется для запроса значений ключа реестра.376377#### `_winreg.KEY_SET_VALUE`378379Требуется для создания, удаления или установки значения реестра.380381#### `_winreg.KEY_CREATE_SUB_KEY`382383Требуется для создания вложенного ключа реестра.384385#### `_winreg.KEY_ENUMERATE_SUB_KEYS`386387Требуется для перечисления вложенных ключей реестра.388389#### `_winreg.KEY_NOTIFY`390391Требуется для запроса уведомлений об изменениях для ключа реестра или для его вложенных ключей.392393#### `_winreg.KEY_CREATE_LINK`394395Зарезервировано для использования системой.396397#### 35.3.1.2.1. Специфика 64-разрядной версии398399За дополнительными сведениями см. [Доступ к альтернативному представлению реестра](https://python-all.ru/2.7/library/_winreg.html).400401#### `_winreg.KEY_WOW64_64KEY`402403Указывает, что приложение в 64-разрядной Windows должно работать с 64-разрядным представлением реестра.404405#### `_winreg.KEY_WOW64_32KEY`406407Указывает, что приложение в 64-разрядной Windows должно работать с 32-разрядным представлением реестра.408409### 35.3.1.3. Типы значений410411Для получения дополнительной информации см. [Типы значений реестра](https://python-all.ru/2.7/library/_winreg.html).412413#### `_winreg.REG_BINARY`414415Двоичные данные в любом виде.416417#### `_winreg.REG_DWORD`41841932-разрядное число.420421#### `_winreg.REG_DWORD_LITTLE_ENDIAN`42242332-разрядное число в формате little-endian.424425#### `_winreg.REG_DWORD_BIG_ENDIAN`42642732-разрядное число в формате big-endian.428429#### `_winreg.REG_EXPAND_SZ`430431Строка, завершающаяся нулевым символом, содержащая ссылки на переменные окружения (`%PATH%`).432433#### `_winreg.REG_LINK`434435Символическая ссылка в Юникоде.436437#### `_winreg.REG_MULTI_SZ`438439Последовательность строк, завершающихся нулевым символом, оканчивающаяся двумя нулевыми символами. (Python обрабатывает это завершение автоматически.)440441#### `_winreg.REG_NONE`442443Неопределённый тип значения.444445#### `_winreg.REG_RESOURCE_LIST`446447Список ресурсов драйвера устройства.448449#### `_winreg.REG_FULL_RESOURCE_DESCRIPTOR`450451Параметр оборудования.452453#### `_winreg.REG_RESOURCE_REQUIREMENTS_LIST`454455Список аппаратных ресурсов.456457#### `_winreg.REG_SZ`458459Нуль-терминированная строка.460461## 35.3.2. Объекты дескрипторов реестра462463Этот объект оборачивает объект HKEY Windows и автоматически закрывает его при уничтожении. Чтобы гарантированно выполнить очистку, можно вызвать либо метод [`Close()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.PyHKEY.Close) этого объекта, либо функцию [`CloseKey()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.CloseKey).464465Все функции реестра в этом модуле возвращают один из таких объектов.466467Все функции реестра в этом модуле, которые принимают объект дескриптора, также принимают целое число, однако рекомендуется использовать объект дескриптора.468469Объекты дескрипторов предоставляют семантику для [`__nonzero__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__nonzero__) – таким образом:470471```python472if handle:473 print "Yes"474```475476будет выведено `Yes`, если дескриптор в данный момент действителен (не был закрыт или отсоединён).477478Объект также поддерживает семантику сравнения, поэтому объекты дескрипторов будут сравниваться как равные, если оба ссылаются на одно и то же значение базового дескриптора Windows.479480Объекты дескрипторов можно преобразовать в целое число (например, с помощью встроенной функции [`int()`](https://python-all.ru/2.7/library/functions.html#int)), в этом случае возвращается соответствующее значение дескриптора Windows. Также можно использовать метод [`Detach()`](https://python-all.ru/2.7/library/_winreg.html#_winreg.PyHKEY.Detach), чтобы вернуть целочисленный дескриптор и отсоединить дескриптор Windows от объекта дескриптора.481482#### `PyHKEY.Close()`483484Закрывает соответствующий дескриптор Windows.485486Если дескриптор уже закрыт, ошибка не возникает.487488#### `PyHKEY.Detach()`489490Отсоединяет дескриптор Windows от объекта дескриптора.491492Результатом является целое число (или длинное целое в 64-разрядной Windows), которое содержит значение дескриптора перед его отсоединением. Если дескриптор уже отсоединён или закрыт, этот вызов возвращает ноль.493494После вызова этой функции дескриптор фактически становится недействительным, но не закрывается. Эту функцию следует вызывать, когда требуется, чтобы базовый дескриптор Win32 существовал дольше, чем объект дескриптора.495496#### `PyHKEY.__enter__()`497498#### `PyHKEY.__exit__(*exc_info)`499500Объект HKEY реализует [`__enter__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__exit__) и, таким образом, поддерживает протокол контекста для оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with):501502```python503with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:504 ... # работа с ключом505```506507будет автоматически закрывать *key* при выходе управления из блока [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).508509Новое в версии 2.6.510