Реестр: создание и удаление ключей реестра
© Макагон Сергей Николаевич для сайта:
Портал программистов C++Builder,
пишите: mailto:cppbuilder@inbox.ru
Данная статья защищена законом Российской федерации об авторском
праве. Размещение данной статьи на других сайтах разрешено только в
таком виде, как есть, без изменений с обязательным указанием
копирайта.
Как всегда, я предлагаю
на примере простой программы разобрать работу с реестром. В моем
примере мы будем создавать и удалять ключи, и проверять реестр на их
наличие.
Итак, начнем :
Скажу сразу - главной функцией программы
будет добавление и удаление себя из автозагрузки средствами реестра, а
также проверка реестра на наличие ключа . Чаще всего работа с реестром и
сводится к подобным функциям.
Создаем новый проект
(File->New->Application).
На форму кидаем три
кнопки:
Button1->Caption - "Добавить ключ"
Button2->Caption -
"Удалить ключ"
Button3->Caption - "Проверить на
наличие"
Начнем с обработчика для кнопки "Добавить ключ" :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
{ HKEY hKey;
char szPath[0x100];
GetModuleFileName(NULL, szPath, sizeof(szPath));
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,
NULL,
&hKey,
NULL);
if (hKey)
{
RegSetValueEx(hKey, "MyProgramm", NULL, REG_SZ, (LPBYTE)szPath, strlen(szPath));
RegCloseKey(hKey);
}
}
Такой код добавляет в
HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run
Ключ с именем MyProgramm (имя конечно можно менять) .
Далее будем удалять ключ который перед этим создали (имя:
MyProgramm)
В обработчике события для "Удалить ключ" пишем :
void __fastcall TForm1::Button2Click(TObject *Sender)
{
{
HKEY hKey;
char szPath[0x100];
GetModuleFileName(NULL, szPath, sizeof(szPath));
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,
NULL,
&hKey,
NULL);
if (hKey)
{
RegDeleteValue(hKey,"MyProgramm");
RegCloseKey(hKey);
}
}
}
Этот код соответственно удаляет в разделе
HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run
Ключ с именем MyProgramm . С созданием и
удалением ключей реестра проблем не должно возникнуть. Вот с проверкой
реестра на наличие ключа надо поднапрягтись .
Для начала надо
сказать, что нужно использовать стандартный класс TRegistry , но
чтобы его использовать нужно подключить Registry.hpp сделать это можно
написав
#include Registry.hpp
под строкой #include vcl.h
Дальше пишем сам обработчик для "Проверить на наличие"
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TRegistry *r=new TRegistry;
r->RootKey=HKEY_LOCAL_MACHINE;
r->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",0);
if (r->ValueExists("MyProgramm")== 1)
{
ShowMessage("Ключ есть !");
return ;
}
ShowMessage("Ключа нету !");
}
Если вы неправильно присоеденили Registry.hpp то прорамма выведет
ошибку на строчке
TRegistry *r=new TRegistry;
Так как класс неполучиться создать.
Давайте рассмотрим остальной
код :
r - у нас будет являться ключем реестра, далее строчками
r->RootKey=HKEY_LOCAL_MACHINE;
r->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",0);
мы присваиваем ему значения веток реестра, а строки
if (r->ValueExists("MyProgramm")== 1)
{
ShowMessage("Ключ есть !");
return ;
}
ShowMessage("Ключа нету !");
}
Проверяют на наличие в указанной ветке ключа с именем MyProgramm .
Если есть, то:
r->ValueExists("MyProgramm")== 1
Если нету, то:
r->ValueExists("MyProgramm")== 0.
Зная эти элементарные правила по работе с реестром можно свободно
добавить к своей программе функцию добавления в автозагрузку через реестр.