Klucze rejestru
Adam Boduch
Ostatnio na grupie dyskusyjnej pl.comp.lang.delphi pojawił się post, w którym człowiek szukał sposobu na zapisanie określonej wartości z rejestru do pliku .reg. Zainspirowało mnie to do napisania programiku...
W sumie polega to jedynie na:
*Odczytaniu konkretnej wartości z rejestru
*Przypisaniu jej do zmiennej
*Zapisaniu danych w odpowiednim formacie w pliku .reg
No to zaczynamy. Przede wszystkim należy zapoznać się z formatem pliku .reg. Poniżej znajduje się przykład takiego pliku:
<code>REGEDIT4
[HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Editor\Options]
"NoCtrlAltKeys"="1"
Pierwsza linijka to nagłówek pliku <b>.reg</b>. Następnie w nawiasie kwadratowym znajduje się ścieżka klucza. Kolejne linijki (może być ich kilka) to wartości klucza, wraz z przypisanymi im danymi.
Wiele spraw już się wyjaśniło, prawda? Teraz cała sztuka polega na napisaniu odpowiedniej procedury. W ogólnym założeniu procedura powinna odczytać wybraną wartość z rejestru i zapisać ją do pliku w odpowiednim formacie.
```delphi
procedure TMainForm.btnMakeClick(Sender: TObject);
var
TF : TextFile; // format pliku
Reg : TRegistry;
Value : String;
begin
AssignFile(TF, 'registry.reg'); // stworz plik .REG
ReWrite(TF);
Reg := TRegistry.Create;
try
{ w zaleznosci od wpisanego w Edit pola przypis klucz glowny }
if edtHomeKey.Text='HKEY_CLASSES_ROOT' then
Reg.RootKey := HKEY_CLASSES_ROOT;
if edtHomeKey.Text='HKEY_CURRENT_USER' then
Reg.RootKey := HKEY_CURRENT_USER;
if edtHomeKey.Text='HKEY_LOCAL_MACHINE' then
Reg.RootKey := HKEY_LOCAL_MACHINE;
if edtHomeKey.Text='HKEY_USERS' then
Reg.RootKey := HKEY_USERS;
if edtHomeKey.Text='HKEY_CURRENT_CONFIG' then
Reg.RootKey := HKEY_CURRENT_CONFIG;
if edtHomeKey.Text='HKEY_DYN_DATA' then
Reg.RootKey := HKEY_DYN_DATA;
{ sprawdz, czy istnieje klucz podany przez uzytkownika }
if not Reg.KeyExists(edtKeyName.Text) then begin
ShowMessage('Brak takiego klucza!'); Exit; end;
Reg.OpenKey(edtKeyName.Text, FALSE); // otworz klucz...
{ nastepnie sprawdz, czy w kluczu istnieje dana wartosc }
if not Reg.ValueExists(edtValueName.Text) then begin
ShowMessage('Brak takiej wartości!'); Exit; end;
Value := Reg.ReadString(edtValueName.Text); // odczytaj wartosc
{ zapisz odczytane z pliku dane }
Writeln(TF, 'REGEDIT4');
Writeln(TF, '');
Writeln(TF, '');
Writeln(TF, '[' + edtHomeKey.Text + '' + edtKeyName.Text + ']');
Writeln(TF, '"' + edtValueName.Text + '"="' + Value + '"');
finally
Reg.Free; // zamknij rejestr
CloseFile(TF); // zamknij plik
end;
end;
Może krótkie objaśnienie...
Na samym początku procedura pobiera dane wprowadzone do kontrolek TEdit zawierające lokalizację wybranej wartości w rejestrze. Po ustawieniu odpowiedniego klucza głównego oraz stwierdzeniu istnienia podanego klucza i wybranej wartości procedura przypisuje tę wartość do zmiennej, po czym zapisuje ją do pliku .reg w odpowiednim formacie. To wszystko!
Zaznaczam, że podany tu przykład nie jest gotowym programem zapisującym wszystkie możliwe formaty danych dostępne w rejestrze. Pobiera on tylko wartości, które są łańcuchem tekstowym, a nie np. zapisane binarnie.
Artykuł mało kompletny, bo pozwala na eksport tylko stringów, ale bez kluczy Default oraz tych ciągów tekstowych,
które na przykład zawierają znak " polecam. Z tego co widze w google niestety trafia się na ten artykuł, dlatego też
polecam mój gotowiec na: Eksport klucza Rejestrów do pliku *.reg :)
fajne, mi się przydało - dzięki
hmm.... niby nic skomplikowanego ale fajna sprawa :)
wow