Реестр и Windows API
В ранних версиях Windows, все её приложения хранили необходимую для запуска и работы информацию в файлах инициализации. С развитием ОС информации, необходимой для сохранения стало так много, что возникла необходимость в новом способе её хранения — реестре. Реестр, — это своеобразная база данных для приложений Windows. Его структура напоминает файловую систему. (не верите посмотрите через regedit.exe только ничего не меняйте). Вообще реестр считают несомненной альтернативой INI-файлам, но я думаю, что эти две технологии имеют наибольшую мощность только при их совмещении.
В Visual Basic есть функции для работы с реестром( GetSetting,SaveSetting) но их возможности ограничены. Они могут работать с реестром только в разделе HKEY_CURRENT_USER\Software\VB and VBA Programms, и способны только читать и записывать. Для начинающего программиста это неплохо, даже хорошо — меньше возможностей навредить.На самом деле Windows может намного больше. Расширить возможности VB, позволяет Windows API.
Windows обладает большим набором функций для работы с реестром, сами по себе GetSetting и SaveSetting тоже вызывают их. С помощью этих функций, вы можете создавать разделы, в любой части реестра, а затем удалять их :), подключать реестр через сеть, сохранять разделы в файле и т.д.
В качестве примера, мы создадим класс, для работы с реестром через Windows API (насколько я знаю в Borland Delphi, нечто подобное уже есть, и один знакомый программист очень этим гордится 🙂 ). Этот класс может работать только со строковыми данными. Я посчитал, что если Вам понадобится больше, Вы сможете сделать это сами. Кроме того класс даёт возможность удалять лишние разделы, и параметры. Работу с реестром через сеть, и остальные возможности я исключил, так как этот класс задуман как расширение Basic’овских функций для работы с реестром. Остальные операции будут заключены в другой класс, который должен будет реализовать все возможности Windows API в работе с реестром.
Итак, хватит лирики, приступим к работе. Создадим новый модуль класса и назовём его RegistryExClass(совсем как в API, RegSetValue,RegSetValueEx). После этого приступим к объявлению необходимых функций.Я рассмотрю только особенные, остальные найдёте в API Text Viewer. (RegOpenKey, RegDeleteValue, RegDeleteKey, RegCloseKey, RegCreateKey)
Private Declare Function RegQueryValueExS Lib «advapi32.dll» _
Alias «RegQueryValueExA» ( _
ByVal hkey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
ByVal lpData As String, _
lpcbData As Long) As Long
Private Declare Function RegSetValueExS Lib «advapi32.dll» _
Alias «RegSetValueExA» ( _
ByVal hkey As Long, _
ByVal lpValueName As String, _
ByVal Reserved As Long, _
ByVal dwType As Long, _
ByVal lpData As String, _
ByVal cbData As Long) As Long
Что здесь особенного, спросите Вы. Объясняю: Как я уже сказал мой класс работает только со строками. Приведённые выше функции, в оригинальном объявлении не имеют чётко определённого типа данных(lpData As Any). При попытке использовать такое объявление, я получал ошибку «Out Of Memory». Как видно в листинге, я объявил lpData как строку, хотя имею возможность присвоить любой тип. Беда в том, что VB не поймёт Вас при попытке объявить две функции. Чтобы обойти это, я и объявил функции с оконаниями «-S». И теперь в класс можно будет добавить ещё функции для работы с различными типами.
Ещё по той же теме. Некоторые функции для работы с реестром имеют параметры типа SECURITY_ATTRIBUTES. Если эти параметры Вам не нужны, то объявите их как Long, и передавайте ноль.
Теперь объявим константы.
‘Объявив эти константы таким способом, Вы дадите
‘пользователю класса возможность выбирать из списка
‘значение параметра
Public Enum HKEY_CONSTANTS
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_CONFIG = &H80000005
HKEY_CURRENT_USER = &H80000001
HKEY_DYN_DATA = &H80000006
HKEY_LOCAL_MACHINE = &H80000002
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_USERS = &H80000003
End Enum
‘Ну ещё константа, для строкового типа
Private Const REG_SZ = 1
Теперь создадим методы для чтения/записи параметров
.GetString Функция
Public Function GetString( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String, _
ByVal ValueName As String) As String
‘Handle раздела реестра
Dim hkey As Long
‘переменная для хранения значения
Dim sData As String
‘Результат работы API функций
Dim lres As Long
‘Тип возвращаемого значения
Dim lDataType As Long
‘переменная для хранения длины строки
Dim lDlen As Long
‘Открываем Раздел
lres = RegOpenKey(HomeKey, KeyName, hkey)
‘Если вернулся не ноль — ошибка, выходим
If lres <> 0 Then GetRegString = vbNullString: Exit Function
‘Продолжаем, заполняем строку пробелами.
sData = String$(64, 32) & Chr$(0)
lDlen = Len(sData)
‘Читаем значение
lres = RegQueryValueExS(hkey, ValueName, 0, lDataType, sData, lDlen)
‘опять проверка на ошибку
If lres <> 0 Then GetRegString = vbNullString: Exit Function
‘проверяем тип полученных данных
If lDataType = REG_SZ Then
GetString = Left$(sData, lDlen — 1)
Else
GetString = vbNullString
End If
‘и закрываем раздел
lres = RegCloseKey(hkey)
End Function
.SaveString Метод
Public Sub SaveString( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String, _
ByVal ValueName As String, _
ByVal Data As String)
‘Handle для корневого раздела
Dim hkey As Long
‘Handle для изменяемого раздела
Dim hSubKey As Long
‘Результат работы функции
Dim lres As Long
‘Открываем корневой раздел
lres = RegOpenKey(HomeKey, vbNullString, hkey)
‘Создаём(если есть открываем) нужный раздел
lres = RegCreateKey(HomeKey, KeyName, hSubKey)
‘Пишем данные
lres = RegSetValueExS(hSubKey, ValueName, 0, _
REG_SZ, Data + Chr$(0), Len(Data) + 1)
‘и закрываем всё открытое
lres = RegCloseKey(hSubKey)
lres = RegCloseKey(hkey)
End Sub
Метод GetString всего лишь читает параметр из реестра. SaveString — имеет больше возможностей. С его помощью Вы можете создать пустой раздел. Для этого вызовите его, установив значение ValueName и Data равное пустой строке. Если хотите установить для раздела значение по умолчанию присвойте Data нужное значение, при нулевом(vbNullString) ValueName.
Теперь поработаем с удалением.
.DeleteValue Метод
Public Sub DeleteValue( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String, _
ByVal ValueName As String)
‘Handle для изменяемого раздела
Dim hkey As Long
‘Результат API функции
Dim lres As Long
‘открываем нужные раздел
lres = RegOpenKey(HomeKey, KeyName, hkey)
‘проверяем на ошибку
If lres <> 0 Then Exit Sub
‘удаляем параметр
lres = RegDeleteValue(hkey, ValueName)
‘закрываем
lres = RegCloseKey(hkey)
End Sub
.DeleteKey
Public Sub DeleteKey( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String)
‘результат APi функции
Dim lres As Long
‘Удаляем раздел из корневого
lres = RegDeleteKey(HomeKey, KeyName)
End Sub
Как Вы наверное заметили, я сохранял результат работы API функций во всех процедурах и функциях, а проверял только в некоторых. Вообще рекомендуется проверять результат всегда, если дело касается каких-то изменений в системе, но я пытался создать код минимального размера, и сэкономил на проверке, особой беды нет — класс работает и неплохо. Но на всякий случай возьмите на заметку. Вот в общем-то и всё, что я хотел сообщить Вам о работе с реестром. Весь код я скопировал в прямо из VB-редактора, так что он должен работать, если что удалите лишние подчёркивания.
структура и API функции реестра windows
Особенности и структура реестра Windows
Реестр — системный журнал, в который программы записывают свои системные данные. Однако есть еще программы, которые записывают по старинке, в INI-файлы. Реестр Windows являет собой иерархическую базу данных, где лежат данные системных настроек, путей, переменных а также данные программ. В современных WIndows реестр лежит в двух файлах в каталоге SysteMRoot — User.dat и System.dat. Второй файл содержит данные обо всех пользователях ПК, первый — те данные, которые были реализованы конкретным пользователем.
Операционная система не инсталлирует утилиту RegEdit и не создает ярлыки для быстрого доступа. Это не ошибка разработчиков, а одна из мер защиты реестра от неопытных пользователей. Операции над реестром могут быть необратимыми, и повредить всю систему.
Также неопытным пользователям прежде чем изменять любые данные в реестре, есть рекомендация: сделать резервную копию реестра. Для этого в меню реестра есть команда Export Registry File, которая делает резервную копию всего реестра.
С точки зрения разработчика, не нужно знать редактирования реестра, нужно знать как он используется приложениями которые записывают и читают данные из него. Реестр имеет иерархическую структуру. В окне же это показано как каталоги и подкаталоги. Первые ответвления показаны в таблице 1.
Раздел | Содержимое |
---|---|
HKEY_CLASSES_ROOT | Содержит данные о зарегистрированных классах и расширениях документов. Этот раздел является ссылкой на подраздел — HKEY_LOCAL_MACHINESOFTWAREClasses |
HKEY_CURRENT_USER | Данные о настройках текущего пользователя (сетевые настройки, рабочий стол и тд) Данные раздел является ссылкой на подраздел HKEY_USERS для конкретного пользователя |
HKEY_LOCAL_MACHINE | Данные о аппаратных настроек, схемы подключения аппаратных элементов, глобальные настройки приложений |
HKEY_USERS | Данные о всех пользователях, которые зарегистрированы в данной локальной системе |
HKEY_CURRENT_CONFIG | Ссылка на подраздел — HKEY_LOCAL_MACHINEConfigxxxx, где хххх — числовая характеристика конкретной аппаратной конфигурации |
HKEY_DYN_DATA | Динамические данные для устройств Plug-and-Play и драйверов виртуальных устройств |
Также в реестре присутствуют различные типы данных. Такими данными можно пользоваться с помощью API-функций (RegQueryValueEx() и др.). В табл.2 показаны эти типы.
Тип данных | Описание |
---|---|
REG_BINARY | Необработанные двоичные данные. Множество данных об аппаратных элементах хранится в двоичном виде и выводится в окне реестра в шестнадцатеричном формате |
REG_DWORD | Данные которые записаны целым числом. Многие параметры драйверов и служб устройств работают с этим типом |
REG_SZ | Текстовая строка в формате, это удобно для чтения данных человеком. Этот тип предназначен обычно для описания |
REG_EXPAND_SZ | Расширяемая строка информации. Это строка содержит текст переменной, которая может редактироваться приложением |
REG_MULTI_SZ | Многострочное поле, параметры которого являются элементом списка. Строки разделены символом NULL |
REG_FULL_RESOURCE_DESCRIPTOR | Список который служит для хранения данных о аппаратных компонентов и драйвера |
REG_LINK | Ссылка символьная в кодировке Unicode |
REG_RESOURCE_LIST | Список ресурсов драйверов устройств |
REG_NONE | Тип значения не определен |
API-функции для работы с реестром Windows
В Windows реализовано 26 API-функций для работы с реестром. Они показаны в табл.3.
winreg — Доступ к реестру Windows¶
Функции предоставляют API реестра Windows для Python. Вместо использования целого числа в качестве дескриптора реестра, используется обрабатываемый объект , чтобы убедиться, что дескрипторы закрыты правильно, даже если программист пренебрегает их явным закрытием.
Изменено в версии 3.3: Несколько функций в этом модуле поднимают WindowsError , который теперь является алиас OSError .
Функции¶
Модуль предлагает следующие функции:
winreg. CloseKey ( hkey ) ¶
Закрывает ранее открытый раздел реестра. Аргумент hkey указывает ранее открытый ключ.
Если hkey не закрыт этим методом (или с помощью hkey.Close() ), он закрывается, когда hkey объект уничтожается Python.
Устанавливает подключение к предопределенному дескриптору реестра на другом компьютере и возвращает обрабатываемый объект .
computer_name — имя удаленного компьютера r»\\computername» формы. Если None , локальная компьютер будет используемый.
key — предопределенный дескриптор для подключения.
Возвращает значение является дескриптором открытого ключа. При сбое функции возникает исключение OSError .
Raises an auditing event winreg.ConnectRegistry with arguments computer_name , key .
Изменено в версии 3.3: Смотрите выше .
Создает или открывает указанный ключ, возвращая обрабатываемый объект .
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
sub_key — это строка, который называет ключ, открываемый или создаваемый этим методом.
Если key является одной из предварительно определенных клавиш, sub_key может быть None . В этом случае дескриптор возвращенный является тем же самым дескриптором клавиши, переданным функции.
Если ключ уже существует, эта функция открывает существующий ключ.
Возвращает значение является дескриптором открытого ключа. При сбое функции возникает исключение OSError .
Raises an auditing event winreg.CreateKey with arguments key , sub_key , access .
Raises an auditing event winreg.OpenKey/result with argument key .
Изменено в версии 3.3: Смотрите выше .
Создает или открывает указанный ключ, возвращая обрабатываемый объект .
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
sub_key — это строка, который называет ключ, открываемый или создаваемый этим методом.
reserved является зарезервированным целым числом и должно быть равно нулю. Значение по умолчанию равно нулю.
access — целое число, указывающее маску доступа, описывающую требуемый доступ для ключа. Значение по умолчанию — KEY_WRITE . Другие разрешенные Права доступа см. в разделе значения.
Если key является одной из предварительно определенных ключей, sub_key может быть None . В этом случае дескриптор возвращенный является тем же самым дескриптором ключа, переданным функции.
Если ключ уже существует, эта функция открывает существующий ключ.
Возвращает значение является дескриптором открытого ключа. При сбое функции возникает исключение OSError .
Raises an auditing event winreg.CreateKey with arguments key , sub_key , access .
Raises an auditing event winreg.OpenKey/result with argument key .
Добавлено в версии 3.2.
Изменено в версии 3.3: Смотрите выше .
Удаляет указанный ключ.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
sub_key — это строка, который должен быть вложенным ключом ключа, определяемого параметром key. Этот значение не должен быть None , и ключ может не иметь подразделов.
Этот метод не может удалять ключи с подключами.
При успешном выполнении метода удаляется весь ключ, включая все его значения. При сбое метода возникает исключение OSError .
Raises an auditing event winreg.DeleteKey with arguments key , sub_key , access .
Изменено в версии 3.3: Смотрите выше .
Удаляет указанный ключ.
Функция 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.DeleteKey with arguments key , sub_key , access .
Добавлено в версии 3.2.
Изменено в версии 3.3: Смотрите выше .
Удаляет именованный значение из раздела реестра.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
value — это строка, определяющий удаляемый значение.
Raises an auditing event winreg.DeleteValue with arguments key , value .
Перечисляет подразделы открытого раздела реестра, возвращая строка.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
index — целое число, определяющее индекс извлекаемого ключа.
Функция извлекает имя одного подраздела при каждом вызове. Обычно он вызывается повторно до тех пор, пока не возникнет OSError исключение, указывающее на то, что больше нет доступных значения.
Raises an auditing event winreg.EnumKey with arguments key , index .
Изменено в версии 3.3: Смотрите выше .
Перечисляет значения открытого раздела реестра, возвращая кортеж.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
index — целое число, определяющее индекс извлекаемого значение.
Функция извлекает имя одного подраздела при каждом вызове. Обычно он вызывается повторно до тех пор, пока не будет создано OSError исключение, указывающее на отсутствие значения.
В результате получается кортеж из 3 элементов:
Индекс | Значение |
---|---|
0 | Строка, определяющая значение имени. |
1 | Объект, содержащий данные значения и тип которого зависит от базового типа реестра |
2 | Целое число, определяющее тип значения данных (см. таблицу в документах для SetValueEx() ) |
Raises an auditing event winreg.EnumValue with arguments key , index .
Изменено в версии 3.3: Смотрите выше .
Расширяет местозаполнители переменных среды, %NAME% в строки, подобных REG_EXPAND_SZ :
Raises an auditing event winreg.ExpandEnvironmentStrings with argument str .
winreg. FlushKey ( key ) ¶
Записывает все атрибуты раздела в реестр.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
Нет необходимости вызывать FlushKey() для смены клавиши. Изменения реестра сбрасываются на диск реестром с помощью его ленивого флешера. Изменения реестра также сбрасываются на диск при завершении работы системы. В отличие от CloseKey() , метод FlushKey() возвращает только тогда, когда все данные записаны в реестр. Приложение должно вызывать FlushKey() только в том случае, если требуется абсолютная уверенность в том, что изменения реестра находятся на диске.
Если вы не знаете, требуется ли FlushKey() звонок, это, вероятно, не так.
Создает подраздел под указанным ключом и сохраняет в нем регистрационную информацию из указанного файла.
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.LoadKey with arguments key , 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.OpenKey with arguments key , sub_key , access .
Raises an auditing event winreg.OpenKey/result with argument key .
Изменено в версии 3.2: Разрешить использование именованных аргументов.
Изменено в версии 3.3: Смотрите выше .
Возвращает информацию о ключе, как кортеж.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
В результате получается кортеж из 3 пунктов:
Индекс | Значение |
---|---|
0 | Целое число, указывающее количество вложенных ключей, которыми обладает этот ключ. |
1 | Целое число, дающее число значений, которые имеет этот ключ. |
2 | Целое число, дающее время последнего изменения ключа (если доступно) в 100 наносекунд с 1 января 1601 года. |
Raises an auditing event winreg.QueryInfoKey with argument key .
winreg. QueryValue ( key, sub_key ) ¶
Извлекает неименованное значение для ключа в виде строки.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
sub_key — это строка, в котором содержится имя подраздела, с которым связан значение. Если этот параметр None или пуст, функция извлекает значение, заданные методом SetValue() для ключа, идентифицированного key.
Значения в реестре имеют имя, тип и компоненты данных. Этот метод извлекает данные для первого значение ключа с NULL именем. Но базовый вызов API не возвращает тип, поэтому всегда используйте QueryValueEx() , если это возможно.
Raises an auditing event winreg.QueryValue with arguments key , sub_key , value_name .
winreg. QueryValueEx ( key, value_name ) ¶
Извлекает тип и данные для указанного имени значение, связанного с открытым разделом реестра.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
value_name — это строка, указывающее значение запроса.
В результате получается кортеж из 2 пунктов:
Индекс | Значение |
---|---|
0 | Значение элемента реестра. |
1 | Целое число, определяющее тип реестра для этого значение (см. таблицу в документах для SetValueEx() ) |
Raises an auditing event winreg.QueryValue with arguments key , 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.SaveKey with arguments key , file_name .
Связывает значение с указанным ключом.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
sub_key — это строка с именем подраздела, с которым связан значение.
type — целое число, указывающее тип данных. В настоящее время это необходимо REG_SZ , что означает, что поддерживаются только строки. Используйте функцию SetValueEx() для поддержки других типов данных.
value — это строка, определяющий новый значение.
Если ключ, заданный параметром sub_key, не существует, его создает функция SetValue.
Длины значений ограничены доступной памятью. Длинные значения (более 2048 байт) должны храниться как файлы с именами файлов, сохраненными в реестре конфигурации. Это помогает реестру работать эффективно.
Ключ, определяемый параметром key, должен быть открыт с KEY_SET_VALUE доступом.
Raises an auditing event winreg.SetValue with arguments key , 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.SetValue with arguments key , sub_key , type , value .
winreg. DisableReflectionKey ( key ) ¶
Отключает отражение реестра для 32-разрядных процессов, запущенных в 64-разрядной операционной системе.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
Обычно вызывает NotImplementedError при выполнении в 32-разрядной операционной системе.
Если ключ отсутствует в списке отражений, функция выполняется успешно, но не действует. Отключение отражения для ключа не влияет на отражение каких-либо подразделов.
Raises an auditing event winreg.DisableReflectionKey with argument key .
winreg. EnableReflectionKey ( key ) ¶
Восстановление отражения реестра для указанного отключенного раздела.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
Обычно вызывает NotImplementedError при выполнении в 32-разрядной операционной системе.
Восстановление отражения для ключа не влияет на отражение каких-либо подразделов.
Raises an auditing event winreg.EnableReflectionKey with argument key .
winreg. QueryReflectionKey ( key ) ¶
Определяет состояние отражения для указанного ключа.
key является уже открытым ключом или одним из предварительно определенных HKEY_* константы .
Возвращает True , если отражение отключено.
Обычно вызывает NotImplementedError при выполнении в 32-разрядной операционной системе.
Raises an auditing event winreg.QueryReflectionKey with argument key .
Константы¶
Следующие константы определены для использования во многих _winreg функциях.
HKEY_* константы¶
Записи реестра, подчиненные этому разделу, определяют типы (или классы) документов и свойства, связанные с этими типами. Командные и COM-приложения используют информацию, хранящуюся в этом разделе.
Записи реестра, подчиненные этому разделу, определяют предпочтения текущего пользователя. Эти настройки включают настройки переменных среды, данные о группах программ, цветах, принтерах, сетевых соединениях и предпочтениях приложений.
Записи реестра, подчиненные этому разделу, определяют физические состояние компьютера, включая данные о типе шины, системной памяти, установленном оборудовании и программном обеспечении.
Записи реестра, подчиненные этому разделу, определяют конфигурацию пользователя по умолчанию для новых пользователей на локальная компьютере и конфигурацию пользователя для текущего пользователя.
Записи реестра, подчиненные этому разделу, позволяют получать доступ к данным о производительности. Данные фактически не хранятся в реестре; функции реестра заставляют систему собирать данные из своего источника.
Содержит сведения о текущем профиле оборудования локальная компьютерной системы.
Этот ключ не используемый в версиях Windows после 98.
Права доступа¶
Дополнительные сведения см. в разделе Безопасность ключа реестра и доступ.
Объединяет STANDARD_RIGHTS_WRITE, KEY_SET_VALUE и KEY_CREATE_SUB_KEY права доступа.
Требуется для запроса значения раздела реестра.
Требуется для создания, удаления или установки значение реестра.
Требуется для создания подраздела раздела реестра.
Требуется для перечисления подразделов раздела реестра.
Требуется для запроса уведомлений об изменении раздела реестра или подразделов раздела реестра.
Зарезервировано для использования в системе.
64-битная версия¶
Указывает, что приложение в 64-разрядной Windows должно работать в 64-разрядном представлении реестра.
Указывает, что приложение в 64-разрядной Windows должно работать в 32-разрядном представлении реестра.
Типы значений¶
Дополнительные сведения см. в разделе Типы значений реестра.
Двоичные данные в любой форме.
32-разрядное число в формате прямого порядка байт (little-endian). Эквивалентно REG_DWORD .
32-разрядное число в формате обратного порядка байт (big-endian).
Пустая строка, содержащая ссылки на переменные среды ( %PATH% ).
Символьная ссылка в Юникоде.
Последовательность пустых строки, завершенных двумя нулевыми символами. (Python обрабатывает это завершение автоматически.)
Не определен тип значения.
Добавлено в версии 3.6.
64-разрядное число в формате прямого порядка байт (little-endian). Эквивалентно REG_QWORD .
Добавлено в версии 3.6.
Список ресурсов драйвера устройства.
Список аппаратных ресурсов.
Строка с завершающим нулем.
Дескриптор реестра объектов¶
Этот объект переносит объект Windows HKEY, автоматически закрывая его при уничтожении. Для гарантии очистки можно вызвать метод Close() для объекта или функцию CloseKey() .
Все функции реестра в этом модуле возвращает один из этих объектов.
Все функции реестра в этом модуле, которые принимают объект дескриптора, также принимают целое число, однако использование объекта дескриптора рекомендуется.
Объекты-дескрипторы обеспечивают семантику для __bool__() — таким образом:
будет печатать Yes , если дескриптор в настоящее время действителен (не был закрыт или отсоединен).
Объект также поддерживает семантику сравнения, поэтому объекты-дескрипторы будут сравнивать true, если они оба ссылаются на один и тот же базовый дескриптор Windows значение.
Объекты-дескрипторы могут быть преобразованы в целое число (например, с помощью встроенной функции int() ), в этом случае основной значение дескрипторов Windows будет возвращенный. Можно также использовать метод Detach() для возвращает целочисленного дескриптора, а также отсоединить дескриптор Windows от объекта дескриптора.
Закрывает базовый дескриптор Windows.
Если дескриптор уже закрыт, ошибка не возникает.
Отсоединяет дескриптор Windows от объекта дескриптора.
Результатом является целое число, которое удерживает значение дескриптора перед его отсоединением. Если дескриптор уже отсоединен или закрыт, он Возвращает нулевым.
После вызова этой функции дескриптор фактически становится недействительным, но не закрывается. Эту функцию можно вызвать, если необходимо, чтобы базовый дескриптор Win32 существовал после срока существования объекта-дескриптора.
Raises an auditing event winreg.PyHKEY.Detach with argument key .
PyHKEY. __enter__ ( ) ¶ PyHKEY. __exit__ ( *exc_info ) ¶
Объект HKEY реализует __enter__() и __exit__() и таким образом поддерживает протокол контекст для инструкции with :
автоматически закрывается key когда элемент управления выходит из блока with .