Шаг 39 - Работа с реестром

Создание проекта

Будем работать с проектом из прошлого шага.

На данный момент идеология хранения информации о программе изменилась. Ранее в версиях Windows 3.x данные о настройке программ хранились в файлах INI, в версиях Windows 9X используется системный реестр. Работа с системным реестром может осуществляться, как из программ, так и с помощью специальной программы REGEDIT. Эта программа позволяет редактировать реестр вручную. Боже упаси Вас редактировать его, результат может быть похож на взрыв бомбы, как в плохом смысле, так и в хорошем. Если Вы ранее не работали с реестром не отступайте от моих шагов ни на шаг, извините за каламбур. Запустить REGEDIT можно через Start(пуск), далее Run(выполнить) набрать REGEDIT и нажать OK.

Если Все это проделывать не хотите воспользуйтесь REG файлом из проекта. Просто щелкните два раза по нему в проводнике. И так данные Вашей программы должны храниться в разделе реестра HKEY_CURRENT_USER\Software\. Дальше должно идти имя вашей компании. Вот его и нет. Поэтому мы его должны создать. Правую кнопку мышки на Software Новый и ключ. Как на рисунке ниже. Имя ключа дайте Step.

39_1.gif (2632 b)

Дальше вы должны создать раздел вашей программы, а также дополнительные разделы и ключи.

39_2.gif (2062 b)

Step39 просто папка для блока параметров. Вообще лучше создавать разделы программным путем после создания раздела компании. Вот например так.

SetRegistryKey("Step");
WriteProfileString("Step39","TestApp" , "Hi");

Или вот таким Reg файлом.

REGEDIT4
[HKEY_CURRENT_USER\SOFTWARE\Step]
[HKEY_CURRENT_USER\SOFTWARE\Step\Step34]
[HKEY_CURRENT_USER\SOFTWARE\Step\Step34\Step39]
[HKEY_CURRENT_USER\SOFTWARE\Step\Step34\Step39]
"TestApp"="Hi"

При чем здесь 34? Имя exe такое, тянется еще с 34 шага. Если шаг делали с нуля, то здесь должно быть имя вашего exe файла.

Создаем код

Изменение функции InitInstance.

BOOL CTestApp::InitInstance()
{
SetRegistryKey(("Step")); // Установить указатель на ключ
AfxMessageBox(GetProfileString("Step39", "TestApp", "None :-(")); // Получить строку

CTestDlg dlg; // Создать объект диалогового окна
m_pMainWnd = &dlg; // главное окно программы это диалоговое окно
dlg.SetEditStr("Hello DDX"); // установить данные
dlg.DoModal();
TRACE(dlg.GetEditStr()); // получить данные и вывести в окно отладки
return FALSE;
}

Описание

SetRegistryKey устанавливает указатель по адресу HKEY_CURRENT_USER\Software\ с этого момента все обращения будут проходить по отношению этого адреса в реестре. Имя компании у нас Step. Дальше будет браться раздел, имя программы, по названию exe файла в нашем случае. GetProfileString получает данные из раздела Step39 и по ключу TestApp, вернется строка типа CString. Ответсвенность за то, что данный параметр строка, и что он существует. Это на вашей совести.

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

Шпаргалка

Данные программы должны храниться в реестре по адресу.

HKEY_CURRENT_USER\Software\

При инициализации программы необходимо установить указатель.

SetRegistryKey(("Step"));

Доступ получаем, используя функцию.

GetProfile...(...);

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.