A registry kezelése Delphi-ben

A Windows egyik jelentős újítása a registry volt, ami lehetővé tette, hogy az alkalmazások egy központi adatbázisban tárolhassák beállításaikat. Ebben a registry-ben található meg a Windows legtöbb beállítása is, ezért a registry remek eszköz lehet egy programozó kezében.

A registry fastruktúra alapján épül fel, mely ún. kulcsokból áll. Egy kulcsban lehetnek további kulcsok, vagy pedig azonosítók. Az azonosítók egy névből és egy értékből állnak, ezek tárolják az információkat. A rendszerleíró adatbázist a regedit.exe programmal nézhetjük meg, vagy módosíthatjuk.

A rendszerbeállítások módosítása helytelen működéshez vagy a rendszer összeomlásához vezethet!

Ahhoz hogy a Delphi-ben a regisztrációs adatbázist használjuk a registry unitra van szükség (uses registry;).

A registry-t az alábbi utasítással tölthetjük be a memóriába, majd dolgunk végeztével menthetjük el:

Var

 Reg: TRegistry;

Begin

 Reg:=TRegistry.create;

 //Utasítások

 Reg.free;

End;

Miután megnyitottuk, ki kell választanunk a kulcsot, amit olvasni vagy írni akarunk:

Reg.Rootkey:= HKEY_CURRENT_USER;

Reg.Openkey(’kulcs neve’,CanCreate:Boolean);

A Rootkey bármelyik lehet az 5 közül, de legtöbbször a HKEY_CURRENT_USER-re van szükség.

A kulcs neve bármi lehet, bár van néhány speciális kulcs. Ilyen például a
\Software\Microsoft\Windows\CurrentVersion\Run
\Software\Microsoft\Windows\CurrentVersion\RunOnce

Mindkettő a HKEY_CURRENT_USER alatt van. Ezekben tárolódnak azok a programok melyek a Windows indulásakor betöltődnek. Az azonosítók neve bármi lehet, értékük pedig a programok elérési útja (pl.: ’C:\program.exe’). A különbség a két kulcs között csak annyi, hogy a RunOnce-ben lévő programok csak a következő indításkor indulnak el, utána az azonosító törlődik, a Run-ban lévők pedig minden indításkor elindulnak.

Az alkalmazások a saját adataikat általában a HKEY_CURRENT_USER\software\alkalmazás neve kulcsban tárolják.

Ha az Openkey második paraméterének értéke True, akkor, ha nem létezik a kulcs, a program létrehozza, ezenkívül a Reg.CreateKey(’név’) utasítással hozhatunk létre új kulcsot.

Az Openkey helyett az OpenKeyReadOnly(’név’) utasítást is használhatjuk, ha nem akarjuk a kulcsot írni.

Az aktuális kulcsot a Reg.CurrentKey HKEY típusú tulajdonság tartalmazza.

Kulcsot a Reg.DeleteKey(’név’) utasítással törölhetünk, mely True értékkel tér vissza, ha a törlés sikeres volt.

Most már tudjuk kezelni a kulcsokat, de a lényegről, az azonosítókról még nem sok szó esett.

A Delphi-ben (magában a registry-ben nem, de ezzel nekünk nem kell foglalkoznunk) egy azonosító értékének a típusa lehet: BinaryData (bináris adat), Bool (boolean), Currency (pénzegység),  Date (dátum), DateTime (dátum idővel), Float (lebegőpontos szám), Integer, String, Time (idő).

Ahhoz, hogy egy azonosítót olvassunk vagy írjunk, ismernünk kell az értékének a típusát.

Minden típushoz külön olvasási függvény tartozik pl.: ReadBool(’azonosító neve’), ReadInteger(’azonosító neve’).
Ezek az azonosító értékével térnek vissza melynek típusa minden esetben megegyezik az érték típusával. Pl.:

Var

 X: integer;

Begin

 X:=readinteger(’szam’);

End;

Ha az olvasni kívánt azonosító nem létezik, vagy a típus nem megfelelő akkor kivétel keletkezik.

Az olvasáshoz hasonlóan az íráshoz is típusonként különböző az utasítás, de a felépítésük azonos. Pl.:

WriteBool(’azonosító neve’,érték);

WriteInteger(’azonosító neve’,érték);

Ha az azonosító létezik, akkor az értéke felülíródik, ha nem, akkor az azonosító létrejön.

Azonosítót a Reg.deletevalue(’név’)-el törölhetünk.

Az itt leírtak elegendőek a registry alapszintű kezeléséhez, aki ennyivel nem elégedne meg, annak ajánlom a Delphi súgóját.

 

Bozsik László - nord_hu@yahoo.com

 

(SZERKESZTŐI MEGJEGYZÉS!!!!)

Amennyiben programjainkban szeretnénk adatokat tárolni, azokat lehetőleg NE a registry-ben tegyük, hanem inkább INI fájlokban. A registry mérete frissen telepített rendszernél is óriási, programok telepítése közben pedig ez a méret egyre csak nő, ami természetesen lassítja a windows működését, hiszen nem mindegy, hogy mekkora állományban kell egy adatot megkeresni! Registry-ben csak olyan adatot tároljunk, amit nagyon ott kell, a többit tegyük INI fájlba. Ezzel azt is elérjük, hogy a programhoz tartozó beállításainkat könnyen átrakhatjuk egy másik gépre!