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:

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;
- 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)
- 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'
- 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))
- V tomto riadku testujeme otvorenia kľúča na adrese \Software\Devbook\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
- 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:

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;
- 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.
- 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žením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 315x (12.44 MB)
Aplikace je včetně zdrojových kódů v jazyce Delphi