Содержание страницы
winreg – доступ к реестру Windows¶winreg – Windows registry access
Платформы: Windows
Эти функции предоставляют доступ к Windows registry API из Python. Вместо целого числа в качестве дескриптора реестра используется объект-дескриптор, чтобы гарантировать корректное закрытие дескрипторов, даже если программист забудет явно закрыть их.
Этот модуль предоставляет очень низкоуровневый интерфейс к реестру Windows; ожидается, что в будущем будет создан новый модуль winreg, предлагающий более высокоуровневый интерфейс к API реестра.
Этот модуль предоставляет следующие функции:
- winreg.CloseKey(hkey)¶
Закрывает ранее открытый ключ реестра. Аргумент hkey задаёт ранее открытый ключ.
Обратите внимание, что если hkey не был закрыт с помощью этого метода (или через handle.Close()), он закрывается, когда объект hkey уничтожается Python.
- winreg.ConnectRegistry(computer_name, key)¶
Устанавливает соединение с предопределённым дескриптором реестра на другом компьютере и возвращает объект-дескриптор
computer_name – это имя удалённого компьютера, в форме r"\\computername". Если None, используется локальный компьютер.
key – это предопределенный дескриптор для подключения.
Возвращаемое значение – дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение EnvironmentError.
- winreg.CreateKey(key, sub_key)¶
Создаёт или открывает указанный ключ, возвращая объект-дескриптор
key – это уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key – строка, задающая имя ключа, который этот метод открывает или создаёт.
Если key – один из предопределённых ключей, sub_key может быть None. В этом случае возвращаемый дескриптор – это тот же дескриптор ключа, который был передан функции.
Если ключ уже существует, эта функция открывает существующий ключ.
Возвращаемое значение – дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение EnvironmentError.
- winreg.DeleteKey(key, sub_key)¶
Удаляет указанный ключ.
key – уже открытый ключ или любая из предопределённых констант HKEY_*.
sub_key – это строка, которая должна быть подключом ключа, указанного key параметром. Это значение не должно быть None, и ключ не может содержать подключи.
Этот метод не может удалять ключи, содержащие подразделы.
Если метод выполняется успешно, удаляется весь ключ, включая все его значения. Если метод завершается ошибкой, возбуждается исключение EnvironmentError.
- winreg.DeleteValue(key, value)¶
Удаляет именованное значение из ключа реестра.
key – уже открытый ключ или одна из предопределённых констант HKEY_*.
value – это строка, определяющая значение, которое нужно удалить.
- winreg.EnumKey(key, index)¶
Перечисляет подразделы открытого ключа реестра, возвращая строку.
key – уже открытый ключ или любая из предопределённых констант HKEY_*.
index – целое число, идентифицирующее индекс извлекаемого ключа.
Функция извлекает имя одного подключа при каждом вызове. Обычно она вызывается повторно до тех пор, пока не будет возбуждено исключение EnvironmentError, указывающее на отсутствие других значений.
- winreg.EnumValue(key, index)¶
Перечисляет значения открытого ключа реестра, возвращая кортеж.
key – уже открытый ключ или любая из предопределённых констант HKEY_*.
index – целое число, идентифицирующее индекс извлекаемого значения.
Функция извлекает имя одного подключа при каждом вызове. Обычно она вызывается повторно, пока не будет возбуждено исключение EnvironmentError, указывающее на отсутствие значений.
Результат – кортеж из 3 элементов:
Индекс Значение 0 Строка, идентифицирующая имя значения. 1 Объект, содержащий данные значения, и его тип зависит от базового типа раздела реестра. 2 Целое число, идентифицирующее тип данных значения.
- winreg.ExpandEnvironmentStrings(unicode)¶
Разворачивает строки окружения %NAME% в строке Unicode, как константа REG_EXPAND_SZ:
>>> ExpandEnvironmentStrings(u"%windir%") u"C:\\Windows"
- winreg.FlushKey(key)¶
Записывает все атрибуты раздела в реестр.
key – уже открытый ключ или одна из предопределённых констант HKEY_*.
It is not necessary to call FlushKey() to change a key. Registry changes are flushed to disk by the registry using its lazy flusher. Registry changes are also flushed to disk at system shutdown. Unlike CloseKey(), the FlushKey() method returns only when all the data has been written to the registry. An application should only call FlushKey() if it requires absolute certainty that registry changes are on disk.
Примечание
Если неизвестно, необходим ли вызов FlushKey(), то, скорее всего, он не нужен.
- winreg.LoadKey(key, sub_key, file_name)¶
Создаёт подключ под указанным ключом и сохраняет информацию регистрации из указанного файла в этот подключ.
key – уже открытый ключ или любая из предопределённых констант HKEY_*.
sub_key – строка, идентифицирующая загружаемый подключ.
file_name – это имя файла, из которого загружаются данные реестра. Этот файл должен быть создан функцией SaveKey(). В файловой системе FAT (file allocation table) имя файла не может содержать расширение.
Вызов LoadKey() завершается ошибкой, если вызывающий процесс не имеет привилегии SE_RESTORE_PRIVILEGE. Обратите внимание: привилегии отличаются от разрешений – подробнее см. в документации Win32.
Если key – дескриптор, возвращённый ConnectRegistry(), то путь, указанный в fileName, является относительным для удалённого компьютера.
В документации Win32 подразумевается, что key должен находиться в ветке HKEY_USER или HKEY_LOCAL_MACHINE. Это может быть как верно, так и нет.
- winreg.OpenKey(key, sub_key[, res=0][, sam=KEY_READ])¶
Открывает указанный ключ, возвращая объект-дескриптор
key – уже открытый ключ или любая из предопределённых констант HKEY_*.
sub_key – это строка, идентифицирующая открываемый подраздел.
res – зарезервированное целое число, должно быть равно нулю. По умолчанию – ноль.
sam – целое число, задающее маску доступа, описывающую требуемый уровень безопасности для ключа. По умолчанию KEY_READ
Результат – новый дескриптор указанного раздела.
Если функция завершается ошибкой, возбуждается исключение EnvironmentError.
- winreg.OpenKeyEx()¶
- Функциональность OpenKeyEx() предоставляется через OpenKey() с использованием аргументов по умолчанию.
- winreg.QueryInfoKey(key)¶
Возвращает информацию о разделе в виде кортежа.
key – уже открытый ключ или одна из предопределённых констант HKEY_*.
Результат – кортеж из 3 элементов:
Индекс Значение 0 Целое число, указывающее количество подразделов, которые есть у этого раздела. 1 Целое число, указывающее количество значений, которые есть у этого раздела. 2 Целое число, указывающее время последнего изменения ключа (если доступно), в сотнях наносекунд с 1 января 1600 года.
- winreg.QueryValue(key, sub_key)¶
Извлекает безымянное значение ключа в виде строки
key – уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key – строка, содержащая имя подключа, с которым связано значение. Если этот параметр равен None или пуст, функция извлекает значение, заданное методом SetValue() для ключа, определяемого key.
Значения в реестре имеют компоненты имени, типа и данных. Этот метод извлекает данные для первого значения ключа с именем NULL. Однако нижележащий вызов API не возвращает тип. Некруто, некруто, некруто – НЕ ИСПОЛЬЗУЙТЕ ЭТОТ МЕТОД!!!
- winreg.QueryValueEx(key, value_name)¶
Извлекает тип и данные для указанного имени значения, связанного с открытым ключом реестра.
key – уже открытый ключ или одна из предопределённых констант HKEY_*.
value_name – строка, указывающая имя запрашиваемого значения.
Результат – кортеж из 2 элементов:
Индекс Значение 0 Значение элемента реестра. 1 Целое число, задающее тип реестра для этого значения.
- winreg.SaveKey(key, file_name)¶
Сохраняет указанный раздел и все его подразделы в указанный файл.
key – уже открытый ключ или одна из предопределённых констант HKEY_*.
file_name – это имя файла, в который будут сохранены данные реестра. Этот файл не должен существовать. Если имя файла содержит расширение, его нельзя использовать в файловых системах с таблицей размещения файлов (FAT) методами LoadKey(), ReplaceKey() или RestoreKey().
Если key представляет раздел на удалённом компьютере, то путь, задаваемый file_name, указывается относительно этого удалённого компьютера. Вызывающий этот метод должен обладать привилегией безопасности SeBackupPrivilege. Обратите внимание: привилегии отличаются от разрешений – подробнее см. в документации Win32.
Эта функция передаёт NULL для security_attributes в API.
- winreg.SetValue(key, sub_key, type, value)¶
Связывает значение с указанным разделом.
key – это уже открытый раздел или одна из предопределённых констант HKEY_*.
sub_key – это строка, задающая имя подраздела, с которым связано значение.
type – это целое число, задающее тип данных. В настоящее время это должен быть REG_SZ, то есть поддерживаются только строки. Для работы с другими типами данных используйте функцию SetValueEx().
value – это строка, задающая новое значение.
Если раздел, указанный параметром sub_key, не существует, функция SetValue создаёт его.
Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в виде файлов, имена которых сохраняются в конфигурационном реестре. Это помогает реестру работать эффективно.
Раздел, указанный параметром key, должен быть открыт с правом доступа KEY_SET_VALUE.
- winreg.SetValueEx(key, value_name, reserved, type, value)¶
Сохраняет данные в поле значения открытого ключа реестра.
key – это уже открытый раздел или одна из предопределённых констант HKEY_*.
value_name – это строка, задающая имя подраздела, с которым связано значение.
type – это целое число, задающее тип данных. Это должна быть одна из следующих констант, определённых в данном модуле:
Константа Значение REG_BINARY Двоичные данные в любом виде. REG_DWORD 32-битное число. REG_DWORD_LITTLE_ENDIAN 32-разрядное число в формате little-endian. REG_DWORD_BIG_ENDIAN 32-разрядное число в формате big-endian. REG_EXPAND_SZ Строка, завершающаяся нулевым символом, содержащая ссылки на переменные окружения (%PATH%). REG_LINK Символическая ссылка в Юникоде. REG_MULTI_SZ Последовательность строк, завершающихся нулевым символом, заканчивающаяся двумя нулевыми символами. (Python обрабатывает это завершение автоматически.) REG_NONE Неопределённый тип значения. REG_RESOURCE_LIST Список ресурсов драйвера устройства. REG_SZ Нуль-терминированная строка. reserved может быть чем угодно – в API всегда передаётся ноль.
value – это строка, задающая новое значение.
Этот метод также может задавать дополнительные данные и информацию о типе для указанного раздела. Раздел, указанный параметром key, должен быть открыт с правом доступа KEY_SET_VALUE.
Чтобы открыть раздел, используйте методы CreateKeyEx() или OpenKey().
Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в виде файлов, имена которых сохраняются в конфигурационном реестре. Это помогает реестру работать эффективно.
Объекты дескрипторов реестра¶Registry Handle Objects
Этот объект оборачивает объект Windows HKEY, автоматически закрывая его при уничтожении объекта. Чтобы гарантированно освободить ресурсы, можно вызвать либо метод Close() самого объекта, либо функцию CloseKey().
Все функции реестра в этом модуле возвращают один из таких объектов.
Все функции реестра в этом модуле, принимающие объект дескриптора, также принимают целое число, однако рекомендуется использовать объект дескриптора.
Объекты дескриптора поддерживают семантику __bool__() – поэтому
if handle:
print("Yes")
будет выведено Yes, если дескриптор в текущий момент действителен (не был закрыт или отсоединён).
Объект также поддерживает семантику сравнения, поэтому объекты дескрипторов будут сравниваться как равные, если оба ссылаются на одно и то же значение базового дескриптора Windows.
Объекты дескриптора можно преобразовать в целое число (например, с помощью встроенной функции int()), в этом случае возвращается базовое значение дескриптора Windows. Также можно использовать метод Detach(), чтобы получить целочисленный дескриптор и отсоединить дескриптор Windows от объекта дескриптора.
- PyHKEY.Close()¶
Закрывает соответствующий дескриптор Windows.
Если дескриптор уже закрыт, ошибка не возникает.
- PyHKEY.Detach()¶
Отсоединяет дескриптор Windows от объекта дескриптора.
Результат – целое число, содержащее значение дескриптора до его отсоединения. Если дескриптор уже отсоединён или закрыт, возвращается ноль.
После вызова этой функции дескриптор фактически становится недействительным, но дескриптор не закрывается. Эту функцию следует вызывать, когда требуется, чтобы базовый дескриптор Win32 существовал дольше, чем время жизни объекта дескриптора.
- PyHKEY.__enter__()¶
- PyHKEY.__exit__(*exc_info)¶
Объект HKEY реализует __enter__() и __exit__() и, таким образом, поддерживает протокол контекстного менеджера для оператора with:
with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key: # ... работа с разделом ...
автоматически закроет key, когда управление покинет блок with.