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