OBSŁUGA REJESTRU WINDOWS.

 

Jeśli nie wiesz czym jest rejestr Windows to czytanie tego artykułu nie ma sensu. W każdym bądź razie rejestr systemowy jest bardzo przydatny, a można go uruchomić wpisując w pole uruchom polecenie regedit, uruchomi się w ten sposób edytor rejestru, który umożliwi poddanie edycji kluczy znajdujących się w rejestrze.
    Pokaże w krótki i bardzo prosty sposób jak można z poziomu własnego programu poddawać edycji klucze w rejestrze, a zrobię to na przykładzie dodawania i sprawdzania i usuwania wartości z klucza odpowiedzialnego za automatyczne uruchamianie programów przy starcie systemu Windows, mam na myśli oczywiście klucz: HKEY_LOCAL_MACHINE "Software\\Microsoft\\Windows\\CurrentVersion\\Run", dodając do tego klucza wartość ciągu o dowolnej nazwie i wartości ciągu będącej ścieżką dostępu do programu, sprawiamy że program ten będzie uruchamiany automatycznie przy starcie systemu.
    W celu poddania edycji rejestru, należy włączyć do projektu bibliotekę: #include <Registry.hpp> w pliku nagłówkowym np. Unit1.h, następnie posłużymy się klasą TRegistry:

Tworzymy klasę:
TRegistry *Reg = new TRegistry();

A teraz na przykładzie jak dodać do rejestru odpowiednią wartość ciągu, tak żeby program z którego wywoływany jest kod, zarejestrował się w rejestrze i uruchamiał się razem z systemem:

// Plik źródłowy np. Unit1.cpp
#include <Registry.hpp>
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 String path = ExpandFileName(Application->ExeName); // pobieranie ścieżki dostępu do programu.
 TRegistry *Rejestr = new TRegistry();
 Rejestr->RootKey = HKEY_LOCAL_MACHINE;
 Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
 Rejestr->WriteString("Nazwa programu dowolna", path);
 delete Rejestr;
}
//--------------------------------

Krótki opis, RootKey to nazwa klucza głównego, nie podlega zmianie i nie można takiego klucza utworzyć, dostępne są tylko te utworzone przez system, OpenKey otwiera klucz będący podkluczem RootKey, tego typu klucze można tworzyć, chociaż nie da się utworzyć podklucza bezpośrednio w kluczu HKEY_LOCAL_MACHINE, system na to nie pozwoli, WriteString tworzy wartość ciągu, będącą wartoscią typu String, tworzona jest wartość o dowolnej nazwie z ciągiem będącym w tym przypadku ścieżką dostępu do programu, ExpandFileName pobiera ścieżkę dostępu do programu, który wywołał tą funkcję wraz z nazwą pliku programu.
Do zapisywania danych w rejestrze zawsze używa się funkcji Write w połączeniu z wybranym typem wartości, i dostępne są następujące typy:

W przypadku odczytywania jest podobnie z tą różnicą że wyraz Write jest zastępowany wyrazem Read:

Odczytywanie wartości odbywa się na podobnej zasadzie:

// Plik źródłowy np. Unit1.cpp
#include <Registry.hpp>
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 String path = ExpandFileName(Application->ExeName); // pobieranie ścieżki dostępu do programu.
 TRegistry *Rejestr = new TRegistry();
 Rejestr->RootKey = HKEY_LOCAL_MACHINE;
 Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
 String tekst = Rejestr->ReadString("Nazwa programu dowolna", path);
 delete Rejestr;
}
//--------------------------------

Sprawdzanie czy istnieje dana wartość również przebiega podobnie:

// Plik źródłowy np. Unit1.cpp
#include <Registry.hpp>
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TRegistry *Rejestr = new TRegistry();
 Rejestr->RootKey = HKEY_LOCAL_MACHINE;
 Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
 bool yesno = Rejestr->ValueExists("Nazwa programu dowolna");
 delete Rejestr;
}
//--------------------------------

No i jeszcze kasowanie wartości:

// Plik źródłowy np. Unit1.cpp
#include <Registry.hpp>
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TRegistry *Rejestr = new TRegistry();
 Rejestr->RootKey = HKEY_LOCAL_MACHINE;
 Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
 Rejestr->DeleteValue("Nazwa programu dowolna");
 delete Rejestr;
}
//--------------------------------

Inne dostępne funkcje:

To nie wyczerpuje wszystkich możliwości, przedstawiłem tylko najbardziej istotne funkcje.

Opracował: Cyfrowy Baron