Artykuł opisuje szczegółowo wszystkie zagadnienia związane z obsługą rejestru. Dołączony jest przykładowy kod źródłowy programu wykonujące bardzo wiele czynności na rejestrze.
1.Fundamenty
Na początku musimy zadeklarować rejestr w naszym programie. Robimy to poprzez dodanie Registry w uses. Następnie deklarujemy obiekt rejestru :
1 |
var Reg: TRegistry; |
Teraz tworzymy obiekt :
1 |
Reg := TRegistry.Create ; |
W Delphi 5 lub wyższych w Create należy dopisać gałąź rejestru jaka nas interesuje
1 |
Reg.Create(KEY_ALL_ACCESS); |
Ustawiamy gałąź główną np.
1 |
Reg.RootKey := HKEY_LOCAL_MACHINE; |
Domyślnie ustawione jest HKEY_CURRENT_USER. Tam zapisywane są ustawienia dla aktualne zalogowanego użytkownika Windows.
Otwórzmy teraz jakiś klucz korzystając z polecenia OpenKey :
1 |
Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion', False); |
Przykładowa funkcja odczytująca datę instalacji systemu Windows.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function GetWinFirstInstallDateTime:TDateTime; var i : LongInt; begin with TRegistry.Create do try RootKey:=HKEY_LOCAL_MACHINE ; if OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion', False) then try ReadBinaryData('FirstInstallDateTime',i, SizeOf(i)) ; Result:=FileDateToDateTime(i) ; finally CloseKey ; end else Exception.Create('Wartosc nie znaleziona'); finally Free ; end; end; |
Niektóre polecenia mogą być jeszcze niezrozumiałe, wytłumaczymy je w dalszej części kursu.
2.Odczyt informacji
Aby odczytać jakiekolwiek informacje z rejestru to musimy znać ich typ zapisu tzn. inne są polecenia do odczytu tekstu, liczb a jeszcze inne do czasu oraz daty. Niżej znajdziesz opis poleceń do odczytu danych różnego typu:
Binaria (Binary)
Dane są zwracane jako record. Do odczytu binariów posłuży:
1 |
ReadBinaryData |
Włączony / Wyłączony (Boolean)
Funkcja zwraca wartość tak lub nie. Oto ona:
1 |
ReadBool |
Data / Czas (DateTime)
Do odczytu będzie potrzebny obiekt TDateTime. Oto funkcja zwracająca :
1 |
ReadDateTime |
Liczby rzeczywiste (Float)
Ta funkcja posłuży do odczytu liczb zmiennoprzecinkowych
1 |
ReadFloat |
Całkowite (Integer)
Zwraca liczby całkowite :
1 |
ReadInteger |
Tekst (String)
Informacje tekstowe :
1 |
ReadString |
3.Zapis informacji
Polecenia podobne do w/w.
WriteBinaryData
WriteBool
WriteCurrency
WriteDateTime
WriteExpandString Służy do zapisu tekstów np. ścieżek plików
WriteFloat
WriteInteger
WriteString
4.Typy danych
Zwracanie typu danych :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
case Reg.GetDataType('SomeValue') of rdInteger: {...} // jeśli będzie liczbą rdString: {...} // jeśli będzie tekstem rdExpandString: {...}// jeśli będzie rozszerzonym tekstem rdBinary: {...} // jeśli będzie wartością binarną rdUnknown: {...} // jeśli będzie nie znanego typu end; |
Powyżej zapisaliśmy: jeśli wartość będzie typu liczbowego ( rdInteger) wtedy zrób :, itd.
5.Pobieranie danych z klucza
Polecenia powinny być już wam znane. Programik wyświetla listę ostatnio otwieranych programów w Delphi ( tutaj w D4) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
uses registry; ... var aKeyInfo: TRegKeyInfo; cHome: String ; begin cHome := 'Software\Borland\Delphi\4.0\History Lists' ; ... if Reg.OpenKey(cHome,False) then if Reg.GetKeyInfo(aKeyInfo) then with aKeyInfo do ShowMessage( cHome + #13 + ' has ' + IntToStr(NumValues) + ' Values' + #13 + 'and ' + IntToStr(NumSubKeys) + ' SubKeys' ); ... |
6.Tworzenie nowych kluczy
Tutaj również wykorzystamy polecenie OpenKey.
Klucz zostanie utworzony tylko wtedy, gdy podamy drugi parametr jako True :
1 |
Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Nakiel', True); |
7.Otwieranie kluczy
Klucze możemy otwierać na dwa sposoby: tylko do odczytu oraz do odczytu i zapisu.
Otwieramy do odczytu i zapisu:
1 |
OpenKey('Software\ODBC\ODBCINST.INI\ODBC Core\FileLis', boolean); |
Otwieramy tylko do odczytu:
1 |
OpenKeyReadOnly('Software\ODBC\ODBCINST.INI\ODBC Core\FileLis', boolean); |
Do czego służy wartość Boolean wytłumaczyłem w części 6 kursu.
8.Usuwanie kluczy
Wykorzystamy w tym celu polecenie :
1 |
DeleteKey(''); |
Usuwa ono klucz wraz z podkluczami i wartościami.
9.Usuwanie wartości
Podobnie jak w przypadku kluczy wartości usuwamy jednym poleceniem.
1 |
DeleteValue(''); |
Jeśli zaś chcesz zmienić nazwę wartości to posłuż się poleceniem :
1 |
RenameValue('',''); |
10.Przenoszenie kluczy
Jeśli korzystasz z serii Windows 9x to w celu przeniesienia klucza użyj polecenia
1 |
MoveKeys |
Jeśli zaś korzystasz z Windows NT, 2000,.. to skorzystaj z polecenia :
1 |
MoveKey |
11.Big Demo + Source
A teraz prawdziwe cudo dla osób chcących bawić się rejestrem. W demie znajdziesz :
Monitor – pokazuje, co się dzieje w rejestrze, jaki program w danej chwili wprowadza do niego modyfikacje.