HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

REG_MULTI_SZ adattípus olvasása a Registry-ből


Példaprogram letöltése

3979 bájt

A Rendszerleíró adatbázis szűk egy tucatnyi típusban tárolja a szoftverek számára szükséges információkat. A tárolt adatok kiolvasása néhány típus esetében egyszerűen megoldható, vannak azonban komplikáltabbak is. Ide tartozik a REG_MULTI_SZ típus, melyből kicsit körülményesebben nyerhetők ki az adatok. Cikkünkben bemutatunk egy módszert ennek a problémának a megoldására.

A REG_MULTI_SZ típus több, nullával lezárt karakterláncot tartalmaz, melyek egy karakterláncot alkotnak. Ennek megfelelően a teljes karakterlánc végén két nullát találunk záróelemként. Erre a kiolvasáskor kell figyelnünk.
A mellékelt példában egy ilyen típusú bejegyzés értékét olvassuk ki úgy, hogy a tárolt karakterláncok a Form TMemo komponensében megjelenjenek. A bejegyzés a következő kulcs alatt található:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cdrom
A bejegyzés neve pedig AutoRunAlwaysDisable lesz.
A kiolvasás műveletét a Reading metódusba ágyaztuk, melynek paraméterei a következő adatokat tartalmazzák:
  • A főkulcs neve.
  • Az alkulcs, melyben a bejegyzés található.
  • A bejegyzés neve.
  • Egy TString lista, mely a kiolvasott karakterláncokat tartalmazza.
A metódusban első lépésben megnyitjuk a megadott alkulcsot olvasásra:
if RegOpenKeyEx(CurrentKey, PChar(Subkey),0, KEY_READ, key) = ERROR_SUCCESS then
...
Ha ez sikerült, akkor a RegQueryValueEx metódussal kiolvassuk a bejegyzés típusát.
  SetLastError(RegQueryValueEx(key,PChar(ValueName), nil,@vType, nil, @vLen));
Ha ez hiba nélkül megtörtént, akkor ellenőrizzük, hogy a típus REG_MULTI_SZ vagy sem.
    if vType = REG_MULTI_SZ then
      begin
Amennyiben a típus megfelelő, akkor a kívánt területű memóriarész lefoglaljuk.
        GetMem(buffer, vLen);
Ezt követően elvégezzük a kiolvasást egy ciklusban, mely addig tart, míg a záró nulla karaktert meg nem találjuk.
        RegQueryValueEx(key,PChar(ValueName),nil,nil,PBYTE(buffer),@vLen);
        p := buffer;
        while p^ <> #0 do
        begin
          Strings.Add(p);
          Inc(p, lstrlen(p) + 1)
        end
Utolsó lépés, hogy a memóriaterületet felszabadítsuk.
        FreeMem(buffer)
        ...
A tárolt karakterláncokat a memóriában a következőképpen kell elképzelni:
string1\0string2\0string3\0laststring\0\0
A metódus hívása a következőképpen történik a gomb megnyomása után:
Reading(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\cdrom','AutoRunAlwaysDisable', Memo1.Lines);

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 708. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |