Práca so systemovými registrami - prihlasovací program

Ostatní jazyky Delphi Práca so systemovými registrami - prihlasovací program

Dnes si ukážeme ako pracovať v Delphi (alebo Lazaruse) so systémovými registrami. Nebudem tu rozoberať teóriu, tá už bola na tejto stránke slušne rozobrana tu.

Prácu s kľúčmi si ukážeme na príklade jednoduchého programu, do registrov budeme zapisovať prihlasovacie meno a heslo. Náš program sa skladá z dvoch Unit-ov, v prvom unite sa budeme zaoberať registráciou a v druhom samotným prihlasením.

Registrácia (Unit1)

Na formulár si vložíme 3x editačné pole a 1x button. Používané označenie vychádza z tohto:

unit1

Kedže chceme samozrejme spolupracovat medzi týmito dvoma Unitmi vložíme do uses 'Unit2', a bude nam treba aj knižncu 'registry'

uses
  ..., registry, Unit2;

Následne ideme do procedúry Button1Click. Pre prácu s registrami nám treba deklarovať premennú, ktorá je triedy TRegistry, ja si ju nazvem 'reg'. Teraz si ukážeme celý kód tejto procedúry a následne ho vysvetlím.

procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;             // deklaracia premennej pre pracu s registrami
    meno, heslo: string;
begin
  meno:=edit1.text;             // vstup ukladame ako prihlasovacie meno

  if (edit2.text = edit3.text) then     // ako je dobrym zvykom, pri registracii sa zadavaju hesla dva krat,tu kontrolujeme zhodu.
    heslo:=edit3.text                   // vstup ukladame ako heslo
  else begin
    MessageDlg('Heslá sa nezhodujú', mtWarning, [mbOK], 0);   //ak sa nezhoduju, vypise varovnu hlasku a ukonci proceduru
    exit;
  end;

  Reg:=TRegistry.Create(KEY_WRITE);                                     // 1.
  try                                                                   // 2.
    Reg.RootKey := HKEY_CURRENT_USER;                                   // 3.
    if Reg.OpenKey('\Software\Devbook\skuska\', True) then              // 4.
      reg.WriteString(meno,heslo);                                      // 5.
  except                                                                // 6.
    MessageDlg('Kľúč sa nepodarilo otvoriť', mtWarning, [mbOK], 0); // 7.
    exit;                                                               // 8.
  end;                                                                  // 9.
                                                                        // 10.
  reg.CloseKey;                                                         // 11.
  reg.free;                                                             // 12...
  MessageDlg('Registrácia prebehla úspešne', mtInformation, [mbOK], 0);
  form2.show;
  form1.hide;
end;
  1. Najprv si pre premennú 'reg' vytvoríme objekt triedy TRegistry. Parameter Create() určuje čo sa chystá zo súborom, môže nadobúdať 3 základné hodnoty: KEY_READ (pre čítanie), KEY_WRITE (pre zapisovanie) a tak isto môže ostať prázdna, v takom prípade sú právomoci nastavené na KEY_ALL_ACCESS (teda READ aj WRITE)
  2. Riadky 2, 6 a 9 sú súčasťou príkazu 'try finally except' ... ten sa zvykne používať s registrami aby pri neúspešnej práci s registrami program nepadal ale splnil 'except'
  3. Nastavujeme RootKey, teda môžme povedať niečo ako domovský adresár, zvykne sa používať HKEY_LOCAL_MACHINE alebo moje obľúbenejšie je HKEY_CURRENT_USER. (môžte si to cele prejsť sami pomocu tlačítka win + r otvoriťe okno 'spustiť' -> regedit (enter))
  4. V tomto riadku testujeme otvorenia kľúča na adrese \Software\Dev­book\skuska\ pri čom software je už existujúca "pod zložka" HKEY_CURRENT_USER. Od teraz pracujeme v tejto zložke 'skuska'. Kľudne môžte napísať za Software hoci akú cestu, pretože druhý parameter OpenKey určuje či sa má kľúč vytvoriť ak ešte neexistuje, môže nadobúdať hodnoty True alebo False
  5. Ak bolo otvorenie úspešné, zapíše do registra kľúč s názvom meno a hodnotou heslo. Tak ako tu je použitá funkcia WriteString, sa používajú aj ďalšie funkcie, ktorých názov je odvodený od typu hodnoty. Teda: WriteString, WriteInteger, WriteBool, WriteFloat ...

Riadky 7 a 8 sa splnia ak sa telo 'try' nepodari splnit, teda môžme povedať že except je akousi alternatívou pre else

11. Tak ako sme kľúč otvorili pomocou OpenKey, by sme ho mali na záver práce zavrieť a následne (riadok 12.) uvoľniť premennú.

Na konci môžme vidieť, že ak bolo všetko správne splnené tak sa nám tento form schová a ukáže druhý, prihlasovací form.

Prihlásenie a mazanie (Unit2)

Na formulári máme 2x editačné pole a 1x button. Používané označenie vychádza z tohto:

unit2

Nesmieme zabudnúť vložiť 'registry' do uses.

Budeme znova pracovať v procedúre Button1Click

procedure TForm2.Button1Click(Sender: TObject);
var reg: TRegistry;
    heslo: string;                              // ... premennu na meno nam nebude treba
begin
  reg:=TRegistry.Create(KEY_READ);              // vytvorenie kluca s pravami pre citanie
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\Software\Devbook\skuska\', True) then
      heslo:=reg.ReadString(edit1.text);        // citanie hodnoty kluca s nazvom z edit1 sa uklada do premennej heslo
  finally                                               // ... plati to iste ako pri WriteString
  end;

  if (heslo = edit2.text) then begin            //porovnavame heslo z registru s napisanym heslom v edit2
    if MessageDlg('Prihlásenie prebehlo úspešne, prajete si vymazať registry vytvorene týmto programom ?', mtInformation, [mbYes,mbNo], 0) = mrYes then  //1.
      reg.DeleteKey('\Software\Devbook\skuska\');                               //2.
  end
  else
    MessageDlg('Nesprávne meno alebo heslo', mtWarning, [mbOK], 0);
  reg.CloseKey;
  reg.free;
end;
  1. Ak sa heslá zhodujú vypíšeme víťaznú hlášku a opýtame sa na vymazanie použitých registrov, messagedlg testujeme, ak sa stlačí Yes, pokračuje sa k riadku 2., ak nie pokračuje sa k uzavretiu a uvoľneniu kľúča.
  2. Tento príkaz vymaže celú zložku 'skuska' aj s jej obsahom, teda s kľúčami, ktoré tam náš program uložil. Parameter funkcie je cesta k mazanému kľúču. Ak sa Vám podarí naučiť tento príkaz, tak gratulujem, ste lepší ako 3/4 software-oveho priemyslu nakoľko skoro žiadnemu programu sa nechce mazať po sebe registre, ktoré sa postupne nabaľujú a spomaľujú chod Vášho stroja.

A to je všetko zo základu práce so systemovými registrami ...


 

Stáhnout

Staženo 291x (12.44 MB)
Aplikace je včetně zdrojových kódů v jazyce Delphi

 

  Aktivity (1)

Článek pro vás napsal expoox
Avatar

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Předchozí článek
Užitečné komponenty pro Delphi
Miniatura
Všechny články v sekci
Delphi
Miniatura
Následující článek
DelphiX tutoriály

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!