Функции для работы с реестром


Основные принципы работы с системным реестром

Исследование структуры реестра Windows 98/XP: базовые функции

Цель: изучить структуру ключей реестра, типы параметров ключей, способы редактирования реестра; получить практические навыки работы с редактором реестра RegEdit.

Теоретические сведения

Основные принципы работы с системным реестром

Системный реестр – база данных, которая сохраняет параметры настройки для 32 разрядных версий Microsoft Windows, включая Windows 95, 98 и NT. Он содержит информацию и параметры настройки для всех аппаратных средств, программ, пользователей, и свойств PC. Каждый раз, когда пользователь делает изменения в параметрах настройки Панели управления, или в ассоциациях файлов, системной настройке, или в установленном программном обеспечении, изменения отражаются и сохраняются в системном реестре.

  1. расположение системного реестра

Физические файлы, которые составляют системный реестр, различаются в зависимости от Вашей версии Windows. В Windows 95 и 98 он содержится в двух скрытых файлах каталога Windows, называемыми USER.DAT и SYSTEM.DAT. В Windows NT файлы содержатся в каталоге «Windows/System32/Config».

  1. Редактирование системного реестра

Редактор системного реестра (REGEDIT.EXE) включен в большинство версий Windows (хотя Вы не найдете его в меню «Пуск») он дает возможность просматривать, искать и редактировать данные в пределах системного реестра. Имеется несколько методов для запуска редактора, самый простой — нажать на кнопку «Пуск», затем выбрать Выполнить, и в поле ‘Открыть:’ напечатать «regedit».

Обратите внимание: Всегда резервируйте Ваш системный реестр перед созданием любых изменений в нем. Это даст Вам возможность не переустанавливать операционную систему в случае неправильных действий. Гораздо лучше перестраховаться, чем потом жалеть!

  1. Структура системного реестра

Системный реестр имеет иерархическую структуру, которая подобна структуре каталогов на Вашем жестком диске, а Regedit подобен Проводнику Windows. Реестр содержит три типа объектов: ключи, параметры и значения.

Ключи — вершина иерархической структуры реестра. Под ключами реестра могут располагаться другие узлы иерархического дерева (подключи). Кроме этого, каждый ключ может содержать один или несколько параметров. Все ключи и параметры в пределах подключа должны иметь уникальные имена.

Параметры имеются у каждого ключа и подключа. У каждого ключа обязательно есть хотя бы один параметр -» По умолчанию». Если значения параметров не заданы, то они имеют значение Null.

Параметры состоят из трех частей: тип параметра, имя параметра и его значение. Допустимы следующие типы параметров: двоичные, двойное слово и строковые. Каждому типу параметров соответствует своя пиктограмма в окне редактора реестра.

String (строковое). Представляет из себя ASCIIZ–строку (заканчивается символом с кодом 0). Имеет переменную длину, максимальный размер 64 кБ. Значение строки всегда заключается в кавычки.

Binary (двоичное). Максимальный размер 64 кБ. В окне редактора реестра представлено в виде 16-ричного значения.

DWORD (двойное слово). Представляет собой число размером 32 бита (в реестре 8-значное шестнадцатеричное число). Чтобы отличить этот тип данных от двоичного, перед численным значением DWORD всегда есть два символа: 0х.

  1. Структура системного реестра

Вся база системного реестра разделена на шесть основных разделов, которые принято называть ветвями. Каждая ветвь содержит в себе параметры, относящиеся к определенному набору ключей. Ниже кратко описано назначение этих разделов.

· HKEY_CLASSES_ROOT: Эта ветвь содержит все типы Ваших ассоциаций к файлам, информацию об OLE и данные по ярлыкам.

· HKEY_CURRENT_USER: Эта ветвь связана с ветвью HKEY_USERS, и соответствует пользователю, работающему в настоящее время на PC. Содержит настройки системы и программ, относящиеся к текущему пользователю. Он создается при регистрации пользователя в системе на основе информации из соответствующего ключа [HKEY_USERS]. Именно здесь хранится информация о том, как данный пользователь сконфигурировал рабочую станцию.

· HKEY_LOCAL_MACHINE: Эта ветвь содержит определенную информацию о типах аппаратных средств, программного обеспечения, и других настройках на данном PC, эта информация используется для всех пользователей, которые работают на этом компьютере.

· HKEY_USERS: Эта ветвь содержит индивидуальные настройки каждого пользователя компьютера, каждый пользователь представлен под ключом SID, расположенном под главной ветвью. Содержит информацию обо всех пользователях данной рабочей станции. Здесь хранятся данные о каждом пользователе, а также типовые настройки, служащие шаблоном для новых ключей, создаваемых пользователем. Типовые настройки включают различные значения по умолчанию для программ, событий, конфигураций рабочего стола и т.д.

· HKEY_CURRENT_CONFIG: Эта ветвь связана с ветвью HKEY_LOCAL_MACHINE, и соответствует текущей аппаратной конфигурации. Содержит информацию о текущей конфигурации аппаратуры компьютера, используется в основном на компьютерах с несколькими аппаратными конфигурациями, например, при подключении портативного ПК к стыковочной станции и отключении от нее. Информация, содержащаяся в этом ключе, копируется из ключа [HKEY_LOCAL_MACHINE].

· HKEY_DYN_DATA: Эта ветвь связана с частью HKEY_LOCAL_MACHINE, и служит для использования особенностей Plug-&-Play в Windows, этот раздел динамически изменятся, когда устройства добавляются и удаляются из системы.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: При сдаче лабораторной работы, студент делает вид, что все знает; преподаватель делает вид, что верит ему. 9340 — | 7293 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Работа с реестром в Windows

Редактирование системного реестра предполагает следующие действия:

  • — добавление нового элемента;
  • — поиск параметра или определённого ключа;
  • — редактирование параметра;
  • — удаление параметра или ключа;
  • — переименование.

Чтобы отредактировать параметр, необходимо его предварительно найти и отобразить в правом окне редактора реестра. Для открытия режима редактирования необходимо выполнить двойной щелчок мышкой. Откроется небольшое диалоговое окно, в котором можно указать новое значение текущего параметра.

Чтобы создать вручную новый параметр или ключ, пользователю необходимо перейти в нужную ветку, в меню «Параметры» (вверху слева) выбрать пункт «Создать» и выбрать, что именно необходимо создать. После этого система предложит указать имя нового элемента. При создании нового ключа для указания его значения необходимо также кликнуть по нему мышкой.

Переименовать в реестре можно любой параметр и практически любой ключ (для определённых ключей данная возможность заблокирована). Данный процесс во многом схож со сменой названия у обычных файлов. Для перехода в режим смены названия можно использовать следующие алгоритмы:

  • — выделить мышкой нужный элемент, открыть меню «Правка» и выбрать ссылку «Переименовать»;
  • — после выделения параметра или ключа нажать на клавиатуре клавишу «F2», или кликнуть правой кнопкой мышки и выбрать, строку «Переименовать».

Для удаления ненужного элемента реестра необходимо выделить его и в системном меню «Правка» воспользоваться пунктом «Удалить». Также можно использовать стандартную клавишу «Delete».

Для поиска раздела или ключа следует использовать интегрированный поисковый инструмент. Активировать его можно при помощи пункта «Найти» в меню «Правка».

На экране отобразиться стандартное диалоговое окно поиска, в которое необходимо ввести нужное название. Ниже расположены несколько переключателей, которые позволяют указать, где осуществлять поиск (параметры или ключи). Данный механизм позволяет оперативно искать элементы, которые относятся к определённой утилите (по названию). Вручную их обычно найти очень тяжело, поскольку они разбросаны по реестру.

К этой статье нет коментариев. Вы можете быть первым

Статья: Функции для работы с реестром

Разбирался, давеча, с функциями позволяющими работать с реестром Windows. Нашелрядфункций-членовкласса CWinApp: SetRegistryKey, GetProfileInt, GetProfileString, WriteProfileInt, WriteProfileString . Если кому интересен перевод MSDN’овского хелпа к этим функциям — то его можно найти здесь.

void SetRegistryKey( LPCTSTR lpszRegistryKey );

void SetRegistryKey( UINT nIDRegistryKey );

Указатель на строку содержащую имя ключа реестра.

ID/индекс ключа в реестре.

Заставляет приложение сохранять установки в реестр вместо INI файлов. Эта функция устанавливает m_pszRegistryKey, которая затем используется в следующих функциях-членах CWinApp: GetProfileInt, GetProfileString, WriteProfileInt, and WriteProfileString. Если эта функция была вызвана, список недавно используемых файлов (list of most recently-used — MRU) также сохраняется в реестре. Ключ реестра обычно является именем компании. Ключ реестра имеет следующий вид: HKEY_CURRENT_USERSoftware.

UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault );

Если функция успешно отработала — целое значение строки определенной записи. Возвращаемое значение — значение параметра nDefault если функция не нашла записи. Возвращаемое значение — 0 если значение которое соответствует заданной записи не целое.

Эта функция поддерживает шестнадцатеричную нотацию для значений в .INI файле. Когда вы получаете знаковое целое, вы должны перевести значение в int.

Указатель на строку завершенную нулем которая определяет секцию, содержащую запись в реестре.

Указатель на строку завершенную нулем, которая содержит запись, значение которой будет возвращено.

Определяет значение по умолчанию для возвращения, если система не сможет найти запись. Это значение может быть беззнаковым целым (unsigned) в диапазоне от 0 до 65,535 или знаковым (signed) в диапазоне от -32,768 до 32,767.

Вызывайте эту функцию для получения целого значения записи из определенной секции из реестра или .INI файла.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

Эта функция не чувствительна к регистру букв, таким образом, строки в параметрах lpszSection и lpszEntry могут использовать буквы разного регистра.

CString GetProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault = NULL );

Возвращаемое значение — строка из.INI файла приложения или lpszDefault если строка не найдена. Максимальная длинна строки, которую поддерживает система, определена в _MAX_PATH. Если lpszDefault равно NULL, возвращаемое значение — пустая строка.

Указатель на строку завершенную нулем которая определяет секцию содержащую запись в реестре.

Указатель на строку завершенную нулем, которая содержит запись, строка из которой будет возвращена. Это значение не должно быть равно NULL.

Указатель на значение строки по умолчанию для заданной записи если запись не найдена в инициализирующем (INI) файле.

Вызывайте эту функцию для получения строки связанной с записью в заданной секции реестра приложения или .INI файла.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

CString strSection = «Моя секция»;

CString strStringItem = «Мой строковый элемент»;

CString strIntItem = «Мойцелыйэлемент»;

CWinApp* pApp = AfxGetApp();

pApp->WriteProfileString(strSection, strStringItem, «test»);

strValue = pApp->GetProfileString(strSection, strStringItem);

pApp->WriteProfileInt(strSection, strIntItem, 1234);

nValue = pApp->GetProfileInt(strSection, strIntItem, 0);

BOOL WriteProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue );

Не 0 в случае удачного вызова функции, иначе 0.

Указатель на строку завершенную нулем, которая определяет секцию, содержащую запись. Если секция не найдена, она создается. Имя секции не зависит от регистра; строка может сочетать как заглавные, так и прописные буквы.

Указатель на строку завершенную нулем, которая содержит запись, в которую будет записано значение. Если запись не найдена в заданной секции, она создается.

Содержит значение для записи.

Вызывайте эту функцию для записи заданного значения в заданную секцию реестра или .INI файл.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

CString strSection = «Моя секция»;


CString strStringItem = «Мой строковый элемент»;

CString strIntItem = «Мойцелыйэлемент»;

CWinApp* pApp = AfxGetApp();

pApp->WriteProfileString(strSection, strStringItem, «test»);

strValue = pApp->GetProfileString(strSection, strStringItem);

pApp->WriteProfileInt(strSection, strIntItem, 1234);

nValue = pApp->GetProfileInt(strSection, strIntItem, 0);

BOOL WriteProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue );

Не 0 в случае удачного вызова функции, иначе 0.

Указатель на строку завершенную нулем, которая определяет секцию, содержащую запись. Если секция не найдена, она создается. Имя секции не зависит от регистра; строка может сочетать как заглавные, так и прописные буквы.

Указатель на строку завершенную нулем, которая содержит запись, в которую будет записано значение. Если запись не найдена в заданной секции, она создается.

Указатель на строку, предназначенную для записи. Если этот параметр NULL, запись определенная параметром lpszEntry удаляется.

Вызывайте эту функцию для записи заданной строки в заданную секцию реестра или .INI файл.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

CString strSection = «Моя секция»;

CString strStringItem = «Мой строковый элемент»;

CString strIntItem = «Мойцелыйэлемент»;

CWinApp* pApp = AfxGetApp();

pApp->WriteProfileString(strSection, strStringItem, «test»);

strValue = pApp->GetProfileString(strSection, strStringItem);

pApp->WriteProfileInt(strSection, strIntItem, 1234);

nValue = pApp->GetProfileInt(strSection, strIntItem, 0);

drmiller-developer blog

Software developer Blog

Страницы

11 апреля 2012 г.

C++. Работа с реестром Windows. Создание собственного класса.

Доброго времени суток. Рад видеть Вас в своем блоге.
Сегодня хотелось бы обсудить работу с реестром Windows. Да, эта тема далеко не новая, информации по ней в интернете куча. НО, я решил подойти к вопросу как новичок. Новичок, т.к. с недавнего времени заинтересовался C++ и на данном этапе стараюсь впитать как можно больше полезной и качественной инфы, чтобы пользоваться возможностями этого языка наиболее оптимально. Соответственно, касаемо работы с реестром «голый» Windows API я никогда не использовал.
Вернемся к реестру. Я буду рассматривать работу с реестром Windows средствами Windows API. Возможно есть и другие способы, но я их не рассматривал.
Как человек, несколько лет просидевший на паскале, я конечно же не мог не написать свой класс который будет иметь менее обширный интерфейс нежели голый API интерфейс описанных ниже функций. Об этом позже.

Итак, функции для работы с реестром:

Создание раздела в реестре:
LONG RegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved,
LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult,
LPDWORD lpdwDisposition)

Функция создает раздел если его нет, и открывает если уже он существует.

Функция для открытия существующего раздела реестра:
LONG RegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions,
REGSAM samDesired, PHKEY phkResult)

Функция для закрытия описателя реестра:
LONG RegCloseKey(HKEY hKey);
Функция устанавливающая значение параметра реестра:
LONG RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData)

Функция возвращающая информацию о параметре и значение параметра:
LONG RegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)

В статье, ссылку на которую я привел выше, нет описания типов значений (DWORD dwType и LPDWORD lpType) которые используются в функциях RegSetValueEx и RegQueryValueEx. Поэтому добавлю описание этих типов сюда:

REG_BINARY
Это бинарный (или двоичный) тип. То есть сюда входят только две цифры – 1 и 0. Он не очень привычен для нас, но для компьютера типа лучшего, чем этот, просто не найти…

REG_DWORD
Это целочисленный тип. Многие параметры служб и драйверов устройств имеют этот тип и отображаются в двоичном, шестнадцатеричном или десятичном форматах.

REG_EXPAND_SZ
Строковый тип.

REG_MULTI_SZ
Тип, похожий на предыдущий. Но это не одна строка, а набор строк.

REG_SZ
Тоже строковый тип, но в отличие от REG_EXPAND_SZ это строка фиксированной длины.

Это перечень тех функций которые мне пригодились для написания собственного класса «Registry».

Класс имеет следующую интерфейсную часть (h-файл):

Интерфейс частично схож с тем который предоставляет паскалевский модуль registry. Думаю интерфейс понятен и в дополнительных разъяснениях не нуждается. :)

Пример использования объекта класса:

Класс не реализовывает всех возможностей которые предоставляет Windows API, но это до тех пор пока не возникла необходимость в расширении функционала. А пока в нем есть все «инструменты» первой необходимости. :)

Если кому интересно, исходники класса и примеров применения можно скачать тут:

(Исходники 100% компилятся на gcc и на VS 2005/2008)

Функции для работы с реестром

CString cstrSubKey (_T(«SOFTWARE\\Microsoft\\IE4\\Setup»));
HKEY hKeyPrograms = NULL;
BOOL bRes = OpenRegKey (
HKEY_LOCAL_MACHINE,
cstrSubKey,
hKeyPrograms
);

bRes = CloseRegKey (hKeyPrograms);

  • hKey — один из корневых ключей в реестре:
    • HKEY_CLASSES_ROOT,
    • HKEY_CURRENT_CONFIG,
    • HKEY_CURRENT_USER,
    • HKEY_LOCAL_MACHINE,
    • HKEY_USERS;
  • pSubKey — подраздел в реестре, который нас интересует (в нашем случае: «SOFTWARE\Microsoft\IE4\Setup»).

  • hKeyBase — один из корневых ключей в реестре:
    • HKEY_CLASSES_ROOT,
    • HKEY_CURRENT_CONFIG,
    • HKEY_CURRENT_USER,
    • HKEY_LOCAL_MACHINE,
    • HKEY_USERS;
  • pKeyPath — подраздел в реестре, который нас интересует (в нашем случае: «SOFTWARE»). Этот ключ — родитель для нашего нового ключа;
  • pNewKey — наш новый ключ (в нашем случае — «Irina»).

  • lpClass — имя класса (Я долго искала какую-либо информацию о том, каково практическое применение этого параметра, но ничего умного не нашла. Во всех приводимых примерах этот параметр равен NULL. Я последовала примеру. ;-) Если кто-то сможет меня поправить в этом вопросе, буду премного благодарна.);
  • dwOptions — специальный флаг, который по умолчанию равен REG_OPTION_NON_VOLATILE. В обычной жизни этого хватает (Особо осложненные жизненные обстоятельства я не рассматривала, так как у меня на это просто не было времени. Но я думаю, что при необходимости всегда можно найти нужную информацию.);
  • lpSecurityAttributes — устанавливает правила для наследования (использования) полученного указателя на созданный подключ процессами — детьми основного процесса. Опять же, в обычной жизни может быть без зазрения совести равен NULL;
  • lpdwDisposition — флаг, который говорит о том, что либо этот ключ уже существует, либо еще нет и должен быть создан. Если установить его в NULL, то система сама решает, что ей делать исходя из наличия или отсутствия заданного ключа. То есть, если ключ уже существует, функция работает как RegOpenKeyEx(), если нет — она создает заданный ключ;
  • samDesired — уровень доступа к информации в реестре. Для создания ключа должен быть установлен как минимум равным KEY_CREATE_SUB_KEY (но лучше всего — KEY_ALL_ACCESS).

  • hKey — один из корневых ключей в реестре: HKEY_CLASSES_ROOT и т.д.;
  • pSubKey — подраздел в реестре, который нас интересует (например: «SOFTWARE\Irina»);
  • pKeyName — имя параметра (Например, подключ «Irina» иммет параметр «StringID» со значением, равным 2000. В этом случае pKeyName равно «StringID».).

BOOL bRes = FALSE;

// удаление параметра
bRes = DeleteInfoFromRegistry (
HKEY_LOCAL_MACHINE,
_T(«SOFTWARE\\Irina»),
_T(«StringID»)
);

// удаление подключа
bRes = DeleteInfoFromRegistry (
HKEY_LOCAL_MACHINE,
_T(«SOFTWARE\\Irina»),
NULL
);

  • hKey — указатель на открытый ключ;
  • pSubKey — имя подключа, который мы хотим удалить.

  • hKey — указатель на открытый ключ;
  • lpValueName — имя параметра, который мы хотим удалить.

  • hKey — указатель на handle (описатель) открытого ключа, который нам возвращает функция OpenRegKey();
  • pKeyName — имя параметра;
  • pKeyVal — значение параметра;
  • dwType — тип параметра.

  • hKey — указатель на открытый ключ;
  • lpReserved — зарезервированное значение, равно NULL;
  • pKeyName — имя параметра, значение которого мы хотим установить;
  • dwType — тип данных;
  • lpData — адрес переменной (т.е. области памяти), в которую будет помещен результат (тип этой переменной зависит от типа данных);
  • cbData — размер области этой памяти.

CString cstrSubKey (_T(«SOFTWARE\\Irina»));
CString cstrParName (_T(«StringID»));
CString cstrParVal (_T(«2000»));
HKEY hKeyPrograms = NULL;

// Сначала вызываем
// OpenRegKey(HKEY_LOCAL_MACHINE, cstrSubKey, hKeyPrograms),
// т.к. сначала надо открыть ключ, в котором находится
// наш параметр, затем вызываем функцию по установке
// значения параметра. В данном случае мы не передаем тип,
// т.к. он по умолчанию уже установлен как REG_SZ.

ULONG nRes = SetOneValue (
hKeyPrograms,
cstrParName,
cstrParVal
);

// В конце закрываем реестр: CloseRegKey(hKeyPrograms).

  • hKey — один из корневых ключей в реестре: HKEY_CLASSES_ROOT и т.д.;
  • pSubKey — подраздел в реестре, который нас интересует (например, «Software\Irina»);
  • pKeyName — имя параметра (например: «StringID»);
  • pRes — значение параметра (возвращаемое этой функцией);
  • dwType — тип параметра.

  • hKey — указатель на handle (описатель) открытого ключа, который нам вернула функция OpenRegKey();
  • pRegKey — имя параметра (например, «StringID»);
  • pRes — значение параметра, возвращаемое этой функцией;
  • dwType — тип параметра.

  • hKey — указатель на открытый ключ;
  • lpValueName — имя параметра, значение которого мы хотим получить;
  • lpReserved — зарезервированное значение, равно NULL;
  • lpType — адрес переменной (т.е. области памяти), в которую будет помещен тип результата;
  • lpData — адрес переменной, в которую будет помещен результат. В зависимости от типа данных контейнером для получения значения выступает либо строка символов, либо переменная типа int;
  • lpcbData — адрес переменной, в которой находится размер переменной, предназначенной для помещения в нее результата.

  • hKey — указатель на handle (описатель) открытого ключа, который нам возвращает функция OpenRegKey();
  • nSubKeysCount — количество параметров, возвращаемое функцией значение.

  • hKeyBase — один из корневых ключей в реестре: HKEY_CLASSES_ROOT и т.д.;
  • csKeyPath — подраздел в реестре, который нас интересует (например, «Software\Irina»);
  • acsKeyList — список имен параметров;
  • acsValList — список значений параметров.

  • с помощью функции GetCountOfSubKeys() получаем количество параметров;
  • для каждого параметра сначала считываем его имя с помощью функции RegEnumValue();
  • затем при наличии имени получаем всю информацию о параметре с помощью функции RegQueryMultipleValues(). Среди прочего мы получаем тип параметра. Это необходимо для получения значения параметра;
  • само значение мы получаем с помощью функции GetOneValueFromReg().

  • hKey — указатель на открытый ключ, который нас интересует;
  • dwIndex — индекс параметра;
  • lpValueName — адрес буфера, в который будет помещено имя параметра;
  • lpcbValueName — адрес переменной, в которой находится размер буфера для имени параметра;
  • lpReserved — зарезервированный параметр, равен NULL;
  • lpType — адрес переменной, в которой находится тип возвращаемого значения. В нашем случае он равен REG_NONE, т.к. мы его не знаем и значение параметра с помощью этой функции не считываем;
  • lpData — адрес буфера, в который будет помещено значение параметра;
  • lpcbData — адрес переменной, в которой находится размер буфера для значения параметра.

  • hKey — указатель на открытый ключ, который нас интересует;
  • val_list — указатель на структуру, в которой будут находиться результаты. Перед вызовом функции мы должны внести сюда имя параметра:

Запись в реестр

Название: Функции для работы с реестром
Раздел: Рефераты по информатике, программированию
Тип: статья Добавлен 01:13:04 05 марта 2007 Похожие работы
Просмотров: 45 Комментариев: 14 Оценило: 3 человек Средний балл: 5 Оценка: неизвестно Скачать
26.04.2009, 22:47

Запись в реестр
Создал CLR приложение. добавил файл Settings.h и засунул туда следующий код void SaveSet() <.

Запись в реестр обрезается
Всем привет. Пишу программку, которая записывает в реестр указанные пути к файлам. Код такой.

Очередная запись в реестр — изменения не вносятся
Всем привет! Столкнулся с такой проблемой — вот код на C++: #include int.

Реестр
Написать программу, определяющую значение параметра в открытом разделе и изменяющую это значение на.

Реестр С++
Здравствуйте. У меня такой вопрос: Есть два консольных приложения С ++ одно выводит элементы.

26.04.2009, 22:49 2
27.04.2009, 10:07 3

Вот список основных API-функций для работы с реестром:

Создать ключ — RegCreateKeyEx().
Открыть существующий ключ: RegOpenKeyEx().
Закрыть ключ — RegCloseKey().
Чтение данных — RegGetValue().
Запись данных — RegSetValueEx().
Удаление данных — RegDeleteValue().

Общий смысл работы с реестром такой:
1. Открываем\создаем ключ.
2. Читаем\пишем данные из открытого\созданного ключа.
3. Закрываем открытый\созданный ключ.

27.04.2009, 15:48 [ТС] 4
27.04.2009, 15:48
27.04.2009, 19:50 5

Решение

27.04.2009, 19:59 [ТС] 6
27.04.2009, 20:08 7
12.05.2009, 21:30 8

Насчет RegGetValue(MSDN):
Minimum supported client Windows Vista, Windows XP Professional x64 Edition
Minimum supported server Windows Server 2008, Windows Server 2003 with SP1

для 32х разрядных(NT,XP) нужно использовать RegQueryValueEx.
Параметры:
HKEY hKey — дескриптор открытого ключа реестра(должен быть открыт с правом доступа KEY_QUERY_VALUE);
LPCTSTR lpValueName — имя значения ключа;
LPDWORD lpReserved — зарезервировано(NULL);
LPDWORD lpType- указатель на переменную, которая получит код с указанием типа данных (NULL, если тип кода не требуется);
LPBYTE lpData -указатель на буфер, который получает значение(NULL, если данные не требуются);
LPDWORD lpcbData — указатель на переменную, которая определяет размер буфера(в ней будет записан размер данных, скопированных в lpData).

Дополнительные функции для работы с реестром

Yashied

Модератор

На досуге написал пару функций для работы с реестром. Обе используют рекурсивные вызовы и требуют наличие библиотеки WinAPIEx.au3.

_RegEnumValues() — создает список всех разделов со своими переменными, их значениями и всеми подразделами любой вложенности для указанного раздела реестра. Другими словами, создает структуру раздела реестра. Функция возвращает строку, разделителем в которой является символ с кодом 160 (Unicode) — ChrW(160). Каждая запись в этой строке имеет следующий вид:

относительный путь к разделу \\ параметр =( тип ) значение

Если параметр имеет строковое значение, то добавляются кавычки:

относительный путь к разделу \\ параметр =( тип )» значение «

Каждый раздел начинается с его пути и заканчивается символом «\»:

относительный путь к разделу \

Пример для раздела «HKEY_CLASSES_ROOT\.txt»:

Для чего это нужно? Ну во-первых, вы получаете сразу структуру всего раздела за относительно небольшое время. Во-вторых, это очень удобно для сравнения двух разделов реестра на идентичность.

Замечание. Если к какому-нибудь разделу реестра в пределах заданной ветки будет отказано в доступе на чтение, то функция завершится с ошибкой.

_RegEnumTimes() — возвращает уникальный идентификатор, основанный на времени последней модификации указанного раздела реестра и всех его подразделов любой вложенности. Если вы измените что-нибудь в указанном разделе или в любом из его подразделов и т.д., то значение, возвращаемое этой функцией изменится. Эта функция на порядок быстрее _RegEnumValues(). Смысловой нагрузки значение идентификатора никакой не несет, важен лишь факт его изменения. Это очень удобно для отслеживания факта изменения раздела реестра.


Так же, как и в предыдущей функции, _RegEnumTimes() завершится с ошибкой при отказе в доступе на чтение к любому подразделу указанного раздела реестра.

madmasles

Модератор

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Yashied,
Спасибо! Очень полезные функции. _RegEnumValues() практически мгновенно сделала копию раздела. Я результат в файл записал — несколько не привычный формат записи, но это не страшно . А с помощью _RegEnumTimes() можно, например раздел автозагрузки периодически проверять, что тоже очень полезно. ИМХО, обе функции надо в WinAPIEx.au3 добавлять.
:IL_AutoIt_1::thumbs_up:

Yashied

Модератор
  • Автор темы
  • #3

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Можно и в .reg формате сделать, но там будут длиннее строки, что отразится на скорости + не очень удобно будет анализировать записи («dword» и т.д.), в случае построения дерева раздела. Записать раздел в файл можно и с помощью regedit.exe. Здесь у меня задача стояла именно в сравнении нескольких веток в HKEY_CLASSES_ROOT с целью их дальнейшего отсеивания.

assch

Новичок

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

А если стоит задача сделать снимок всего реестра, потом что нибудь добавить и сделать второй снимок.
потом их сравнить и выявить изменения, и записать в файл.
Чтобы потом эти изменения можно было бы внести обратно (при их отсутствии)
например с помощью regedit.exe.
Как это делает Тотал юнистал.
Эти функции не помогут?
И вообще такой алгоритм трудно сделать силами Autoit?

Yashied

Модератор
  • Автор темы
  • #5

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Можно, но ждать, когда отработает функция придется вечность.

Yashied

Модератор
  • Автор темы
  • #6

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Вот простая функция для экспорта раздела реестра в файл или в переменную при помощи regedit.exe.

assch

Новичок

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

При запуске этой функции Func _RegExport($sKey, $sFile = ») в консоле выводится просто ‘0’
Честно говоря не могу разобраться (вы уж извините)
Подскажете пожалуйста как именно с помощью этой функции
скопировать например весь раздел реестра HKEY_CURRENT_USER
и записать всё это например в 1.txt

Yashied

Модератор
  • Автор темы
  • #8

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Эх, я почему-то думал, что в FileExists() не обязательно нужно передавать полный путь. Это моя ошибка, поправил функцию.

assch

Новичок

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Yashied

Модератор
  • Автор темы
  • #10

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

assch, я не понял вопроса.

Идентификатор предназначен только для сравнения его с полученным ранее идентификатором. Если они различаются, то это однозначно свидетельствует о том, что в данной ветки что-то изменилось. Достаточно удалить один параметр и создать на его месте точно такой же, чтобы идентификатор изменился, несмотря на то, что структура раздела осталась прежней. Для отслеживания непосредственно изменений корневых разделов целиком (HKCR, HKCU и т.д.), лучше использовать _RegExport() в переменную и затем парсить эти данные (задача не из простых).

Не нужно выделять и раскрашивать текст, я все прекрасно вижу.

assch

Новичок

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

И ещё не подскажете почему если снять снимок ветки например — HKLM
то файл у меня получился весом 33.6 мб
А когда я снимаю снимок этой же ветки функцией из библиотеки »Registry_UDFs.au3″
Которую я помню давно скачал с сайта CreatLab
то файл у меня получается 23.1 мб
Не подскажете почему?

assch

Новичок

Re: _RegEnumTimes() и _RegEnumValues() — работа с реестром

Я могу только догадыватся что парсить данные из двух файлов
а потом записать результат изменений это не просто.
Интересно какими алгоритмами хотя бы примерно работают
программы подобной тематики.
например Тотал юнистал для сравнения тратит не больше 5 секунд
и после сравнения у него можно взять регфайл установки и удаления.
Просто я как и все надеюсь что мир не без добрых людей
кто нибудь что нибудь и подскажет.
В разделе для новичков я открыл тему
«Как можно выявить изменения произошедшие на локальном диске»
Не без помощи других уже есть начало этой темы.
в частности две функции одна снимает снимок файловой системы (как правило диск С)
а другая ищет изменения, правда уходит на это около 2 минут.
Интересно что если сделать Батник — fc 1.txt 2.txt >> Inf.txt
то результат выведиться в файл Inf.txt за долю секунды.
Но для больших сравнений она не подходит.
Она без труда (доля секунды) пропарсит два файла размером скажем около 2 мб каждый
но результат выведит в файл не больше 64 кб, то есть если произошли большие изменения
то она покажет соответственно обрезанную информацию.
Я интересовался почему и мне сказали что это функция из досовского наследия поэтому 64кб и всё.
А жалко очень быстрая функция.
Хотя для сравнения эти функции наверно не подойдут так как у регфайлов своеобразный
стиль написания, если только как нибудь смодифицировать функцию.
Ну ладно, сами понимаете Попытка не пытка будем искать.
Буду признателен любой информации.

Yashied

Модератор
  • Автор темы
  • #13

10 секунд, _RegExport() справляется за 2-3 секунды. Но если необходимо экспортировать кучу отдельных веток реестра (с последующим их объединением), то тут _RegExportEx() вне конкуренции.

Что такое реестр Windows и как с ним работать

Доброго времени суток, дорогие читатели. В сегодняшней статье речь пойдет о такой штуке как реестр Windows .

Для большинства пользователей, реестр ассоциируется с чем-то совершенно неизвестным, носит какой-то прямо таки мифический характер и вызывает чуть ли не трепет.

Надо сказать, что всё это не зря, ибо шутить с реестром достаточно опасно и даже маленькое неверное движение приводит зачастую к самым тяжким последствиям. Однако при корректном обращении он становится незаменимым инструментом по настройке Windows .

Нижеописанные советы прояснят некоторые вещи для Вас и проложат некий путь, идя по которому Вы научитесь основам обращения с реестром, чтобы, при необходимости, Вы смогли без особой боязни вносить изменения в его параметры.

Реестр Windows — вводная и термины

Можно сказать, что системный реестр Windows представляет собой базу данных, в которой хранятся различные значения параметров ОС (операционной системы) и установленных Вами приложений.

Преимуществом использования реестра является возможность изменять такие параметры, к которым Вы не доберётесь с помощью окон Windows .

Однако, с другой стороны, изменение этих опций не подкреплено подсказками, визуальным оформлением и всякими предостережениями от неправильных действий, которые зачастую даются при использовании панели управления или других опций системы\программ.

Таким образом, работа с ними представляет собой, так сказать, ходьбу по минному полю для неосведомлённых пользователей и, особенно в силу отсутствия визуальной наглядности, многие даже близко не подходят к этому инструменту.

Что делает реестр Windows?

Вообще механизм его работы достаточно прост. При установке программы (или изменении какого-либо параметра Windows в любом из меню настроек) система сама разыскивает нужные параметры и вносит коррективы в одно из значений реестра.

Например, сие происходит при удалении приложений с помощью инструмента « Установка и удаление программ » (« Панель управления »).

Кстати, когда Вы по безалаберности удаляете папку с установленной программой посредством простого нажатия Удалить в Мой компьютер , а не через соответствующие инструменты в системе, пункты реестра, отвечающие (а именно содержащие настройки программы, информацию о расположении и тд и тп) за эту программу, не исчезают, а остаются в системе и таким образом захламляют её.

Вот почему так важно грамотно удалять приложения, своевременно очищать жёсткий диск и ухаживать за системой, о чем я неоднократно писал в своих статьях — «Чистим реестр, временные файлы и “следы” после удаления программ» или, скажем, «Удаляем любые программы начисто».

Как выглядит реестр? Это некая таблица, содержащая в себе все записи реестра, которая хранится на жёстком диске в виде нескольких файлов, но заныкана она так, что единственный путь работы с ней – использование встроенных инструментов Windows или сторонних программ.

regedit — смотрим на реестр Windows своими глазами

Чтобы войти в Windows -средство для правки реестра откройте «Выполнить» — внешняя ссылка» target=»_blank» >« Пуск » -> «Выполнить», затем в появившемся окне напишите regedit и нажмите Enter .

Перед Вам появится штука (она и есть встроенный Windows -редактор реестра), в которой Вы сможете посмотреть, что же представляет собой сие чудо, о котором я веду речь в этой статье.

Хранящиеся значения разделены на категории и размещены в папках, наподобие тех, которые Вы так привыкли видеть в » Мой компьютер «. Чтобы раскрыть папку нажмите по ней пару раз мышкой или воспользуйтесь небольшим плюсиком рядом с её названием.

Папки раздела называются ключами, а содержимое папок, которое отобразится справа, – значениями.

Зачем может быть нужен реестр Windows

Перед тем, как начать мучить и ковырять систему, предупреждаю: информация, сохранённая в реестре, очень важна для корректной работы Windows , её изменение или удаление может привести к сбою в работе компьютера.

Также стоит отметить, что изменения вступают в силу тогда, когда вы их сделали. Реестр Windows – это не документ Word , в котором вы подтверждаете или отменяете внесение поправок в настройки, поэтому ни в коем случае не изменяйте неизвестные вам параметры.

Самый лёгкий способ обезопасить систему – перед совершением каких либо действий, создать точку восстановления (об этом читайте ниже), которая автоматически сделает копию реестра и к ней Вы, скорее всего (но не всегда), сможете вернуться в случае возникновения проблем.

Иногда стоит записывать внесённые изменения на бумагу, что значительно упростит поиск неисправности, если что-либо пойдёт не так, как планировалось (в голове все не удержишь).

Насколько важен реестр Windows , можно судить по тому, что система самостоятельно создаёт резервные копии всех его значений при каждой загрузке, а поэтому в системе есть такой вариант, как « Загрузка последней удачной конфигурации » (обитает там же где и безопасный режим, а именно при нажатии кнопки F8 перед загрузочным экраном Windows XP (там ползет полосочка)).

Чем и как редактировать реестр

Существует множество программ, предоставляющих большой набор функций для работы с реестром, однако при выборе таких средств надо быть внимательными, поскольку непрофессиональные реализации программ могут негативно сказаться на работе системы.

Поэтому, стоит использовать лишь проверенные приложения или инструменты системы. Я предпочитаю встроенный в Windows инструмент regedit речь о котором уже шла чуть выше (и будет идти чуть ниже :) ).

Вообще управлять реестром не так сложно как кажется, прежде всего Вы должны знать какие из значений изменять и на что их изменять. А там уж дело техники.

Главное окно управления программы Regedit практически не отличается по внешнему виду от привычного пользователю Windows проводника.

Кроме этого, она, как и Internet Explorer, обладает меню « Избранное », которое можно использовать для быстрого доступа к параметрам различных ключей.

Для этого выделите нужное значение, нажмите Избранное — Добавить в избранное , введите название и нажмите кнопку « ОК ». Эта функция очень пригодится, если вам нужно регулярно вносить изменения в одну или несколько опций.

За что отвечают категории реестра и что можно в нём делать

Каждая из пяти основных категорий отвечает за хранение своего набора параметров. Например, HKCU – она же HKEY_CURRENT_USER – содержит в себе ключи, управляющие настройками конкретного пользователя, а HKEY_LOCAL_MACHINE – операционной системы в целом.

Я приведу несколько простейших примеров по работе с реестром дабы Вам были понятны основы:

  • Несмотря на то, что список сайтов, которые Вы посетили c помощью Internet Explorer можно удалить вручную, они все таки всплывут, когда Вы будете вводить в адресную строку схожие варианты;
  • Избавиться от этой истории можно с помощью сторонних программ или по средством правки реестра. Открываем regedit и проходим по пути « HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs »;
  • Зайдя туда, в правой части редактора Вы увидите список адресов, которые Вы можете удалить путём выделения и нажатия на кнопку » Удалить » (предварительно тыкнув правой кнопкой мышки на том, что мы хотим удалить).

Ну или например.

Блокируем диспетчер задач

С помощью реестра можно разблокировать или заблокировать диспетчер задач:

  • Откройте regedit и перейдите к « HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ »;
  • Если в левой части, ниже « Policies », Вы не обнаружите директорию « System » щелкните правой кнопкой мыши по « Policies » и выберите пункт « Создать », а потом « Раздел »;
  • Чуть ниже появится новая папка, которую вам надо переименовать в « System »;
  • Далее, в окне с параметрами (это справа), тыкните правой кнопкой мышки, выберите Создать -> Параметр DWORD и задайте ему имя DisableTaskMgr ;
  • Тыкните по нему правой кнопкой мыши и выберите пункт « Изменить »;
  • В строке ввода значения поставьте 1 для выключения (или 0 для включения) диспетчера задач, а затем установите переключатель « Система исчисления » на « Десятичная »;
  • После этого, при попытке вызова диспетчера задач будет появляться « Диспетчер задач отключён администратором » (или наоборот это сообщение исчезнет, если он был заблокирован).

Осторожность при применении

Хотелось бы ещё раз предостеречь вас от изменений неизвестных значений. Каждый раз, погружаясь в настройки, создавайте контрольные точки для восстановления, а также производите резервное копирование важных файлов. Это защитит Вас от случайных сбоев и потери информации.

Дабы создать точку восстановления, нажмите » Пуск — Выполнить — msconfig — Восстановление системы «. В открывшемся окне вам необходимо выбрать « Создать точку восстановления », после чего, следуя подсказкам, Вы без проблем сохраните нынешнее состояние ОС. Восстановить прежнее состояние можно также с помощью этого меню, воспользовавшись соседним пунктом.

Дабы сделать резервную копию ветки реестра\реестра целиком, запустите regedit , выделите нужный раздел\ветку\папку, нажмите » Файл — Экспорт «, а затем выберите куда сохранить файл .reg .

Дабы потом воспользоваться этой резервной копией либо нажмите Файл — Импорт , либо просто надавите мышкой на файл и подтвердите кнопочкой » Да » добавление данных в реестр Windows .

Если Вы сохраняете какую-то ветку, то она сохраняется (и импортируется, соответственно, тоже) с подпапками и со всеми значениями в ней.

Послесловие

Вот такие пироги. Кстати говоря, на просторах всемирной паутины есть очень много веб-сайтов, которые повествуют о различных параметрах и изменениях в реестре. Будьте внимательны, не стоит использовать первый попавшийся совет, не зная результата.

Опять же я не могу не упомянуть о spyware и прочих шпионских модулях, считающих реестр Windows своим вторым домом. Дабы держать свою систему в безопасности обязательно имейте под рукой антивирус, а так же проверяйте систему на наличие Spyware с помощью, например, этой моей статьи и указанным в нем софте.

Если есть какие-то вопросы или дополнения по статье — милости прошу, оставляйте комментарии ;)

PS : Статья написана благодаря огромным стараниям постоянного читателя — Некраш Сергей — за что ему огромное спасибо. Проделанная им работа достойна уважения.

Функции для работы с реестром / Система / Visual C++

Разбирался, давеча, с функциями позволяющими работать с реестром Windows. Нашел ряд функций-членов класса CWinApp: SetRegistryKey, GetProfileInt, GetProfileString, WriteProfileInt, WriteProfileString.

CWinApp::SetRegistryKey

Параметры

  • lpszRegistryKey — Указатель на строку содержащую имя ключа реестра.
  • nIDRegistryKey — ID/индекс ключа в реестре.

Заставляет приложение сохранять установки в реестр вместо INI файлов. Эта функция устанавливает m_pszRegistryKey, которая затем используется в следующих функциях-членах CWinApp: GetProfileInt, GetProfileString, WriteProfileInt, and WriteProfileString. Если эта функция была вызвана, список недавно используемых файлов (list of most recently-used — MRU) также сохраняется в реестре. Ключ реестра обычно является именем компании. Ключ реестра имеет следующий вид: HKEY_CURRENT_USERSoftware.

CWinApp::GetProfileInt

Если функция успешно отработала — целое значение строки определенной записи. Возвращаемое значение — значение параметра nDefault если функция не нашла записи. Возвращаемое значение — 0 если значение которое соответствует заданной записи не целое.

Эта функция поддерживает шестнадцатеричную нотацию для значений в .INI файле. Когда вы получаете знаковое целое, вы должны перевести значение в int.

Параметры

  • lpszSection — Указатель на строку завершенную нулем которая определяет секцию, содержащую запись в реестре.
  • lpszEntry — Указатель на строку завершенную нулем, которая содержит запись, значение которой будет возвращено.
  • nDefault — Определяет значение по умолчанию для возвращения, если система не сможет найти запись. Это значение может быть беззнаковым целым (unsigned) в диапазоне от 0 до 65,535 или знаковым (signed) в диапазоне от -32,768 до 32,767.

Вызывайте эту функцию для получения целого значения записи из определенной секции из реестра или .INI файла.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

Эта функция не чувствительна к регистру букв, таким образом, строки в параметрах lpszSection и lpszEntry могут использовать буквы разного регистра.

CWinApp::GetProfileString

Возвращаемое значение — строка из.INI файла приложения или lpszDefault если строка не найдена. Максимальная длинна строки, которую поддерживает система, определена в _MAX_PATH. Если lpszDefault равно NULL, возвращаемое значение — пустая строка.

Параметры

  • lpszSection — Указатель на строку завершенную нулем которая определяет секцию содержащую запись в реестре.
  • lpszEntry — Указатель на строку завершенную нулем, которая содержит запись, строка из которой будет возвращена. Это значение не должно быть равно NULL.
  • lpszDefault — Указатель на значение строки по умолчанию для заданной записи если запись не найдена в инициализирующем (INI) файле.

Вызывайте эту функцию для получения строки связанной с записью в заданной секции реестра приложения или .INI файла.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

CWinApp::WriteProfileInt

Возвращаемое значение: Не 0 в случае удачного вызова функции, иначе 0.

Параметры


  • lpszSection — Указатель на строку завершенную нулем, которая определяет секцию, содержащую запись. Если секция не найдена, она создается. Имя секции не зависит от регистра; строка может сочетать как заглавные, так и прописные буквы.
  • lpszEntry — Указатель на строку завершенную нулем, которая содержит запись, в которую будет записано значение. Если запись не найдена в заданной секции, она создается.
  • nValue — Содержит значение для записи.

Вызывайте эту функцию для записи заданного значения в заданную секцию реестра или .INI файл.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

В Windows 3.x, значение сохраняется в WIN.INI файл.

В Windows 95, значение сохраняется в скрытую версию WIN.INI файла.

CWinApp::WriteProfileString

Возвращаемое значение: Не 0 в случае удачного вызова функции, иначе 0.

Параметры

  • lpszSection — Указатель на строку завершенную нулем, которая определяет секцию, содержащую запись. Если секция не найдена, она создается. Имя секции не зависит от регистра; строка может сочетать как заглавные, так и прописные буквы.
  • lpszEntry — Указатель на строку завершенную нулем, которая содержит запись, в которую будет записано значение. Если запись не найдена в заданной секции, она создается.
  • lpszValue — Указатель на строку, предназначенную для записи. Если этот параметр NULL, запись определенная параметром lpszEntry удаляется.

Вызывайте эту функцию для записи заданной строки в заданную секцию реестра или .INI файл.

Записи сохраняются следующим образом:

В Windows NT, значение сохраняется в ключ реестра.

Функции для работы с реестром

На этом шаге мы рассмотрим функции Win32 API , предназначенные для работы с системным реестром .

Функции MFC , служащие для манипуляций с системным реестром, вполне отвечают своему назначению, но иногда они могут показаться недостаточно гибкими, так как позволяют проводить запись только в заранее определенный подраздел основного раздела HKEY_CURRENT_USER . Для изменения других разделов системного реестра придется прибегнуть к соответствующим функциям Win32 API , например, при необходимости сохранить общие для всех пользователей параметры приложения в разделе HKEY_LOCAL_MACHINE\Software .

Кроме того, MFC -функции работают только со строковыми или целочисленными параметрами, а Win32 API поддерживает все форматы данных системного реестра.

В таблице 1 перечислены некоторые из функций Win32 API , работающие с реестром. Более подробная информация об их составе и порядке применения доступна в справочной системе Visual C++ .

На следующем шаге мы вернемся к приложению STUpload .

Илон Маск рекомендует:  Что такое код asp enabledefaultdoc
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL