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.
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.
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);