Программы, исходники, документация C++Builder
  бесплатный софт

SoftHolm.com     Программы     Шахматы     Mozilla Firefox     Книги     Доска объявлений     Игра шарики     Forex     RSS




Реестр: создание и удаление ключей реестра

© Макагон Сергей Николаевич для сайта:
Портал программистов 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.

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




Rambler's Top100 Рейтинг@Mail.ru