Ok. El tipo de datos es REG_MULTI_SZ, esto es, cadenas de caracteres separadas por nulos (#0).
Estuve viendo los métodos de TRegistry y al parecer no hay uno (o no lo he visto) para leer este tipo de datos.
Pero buscando se encuentra
Te pongo la siguiente rutina ReadStrings para leer un valor de este tipo del registro:
Código Delphi
[-]
procedure SzStringsToStrings(const SzStrings: String; Strings: TStrings);
var
NullPos: Integer;
S: String;
begin
S := SzStrings;
while S <> '' do
begin
NullPos := Pos(#0, S);
if NullPos <> 0 then
begin
Strings.Add(S);
Delete(S, 1, NullPos);
end
else
break;
end;
end;
procedure CheckApi(RetVal: Integer);
begin
if RetVal <> ERROR_SUCCESS then
RaiseLastOSError;
end;
procedure ReadStrings(Root: HKey; Key, Value: String; Strings: TStrings);
var
Data: String;
Size: Integer;
begin
with TRegistry.Create do
try
RootKey := Root;
if OpenKey(Key, false) then
begin
CheckApi(RegQueryValueEx(CurrentKey, PChar(Value), nil, nil, nil, @Size));
SetLength(Data, Size);
CheckApi(RegQueryValueEx(CurrentKey, PChar(Value), nil, nil, @Data[1], @Size));
SzStringsToStrings(Data, Strings);
end;
finally
Free;
end;
end;
Un ejemplo de uso:
Código Delphi
[-]
var
Key: String;
Value: String;
begin
Key := 'System\ControlSet001\Services\lanmanserver\Shares';
ReadStrings(HKEY_LOCAL_MACHINE, Key, 'Documentos', Memo1.Lines);
end;
// Saludos