Добрый день всем.
Как используя TRegistry получить данные из мультистроки типа REG_MULTY_SZ?
В Лазарусе ReadString() и ReadBinary() бьют ошибку несовместимости типа значения ветки, ибо такого типа в генофонде Лазаря не предусмотрено вообще.
Модератор: Модераторы
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
DataType: cardinal;
DataSize: cardinal;
Res: integer;
Str: string;
i: integer;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if not Reg.OpenKeyReadOnly('Control Panel\Desktop\MuiCached') then
begin
ShowMessage('Can''t open key');
Reg.CloseKey;
Reg.Free;
exit;
end;
DataSize := 0;
Res := RegQueryValueEx(Reg.CurrentKey, // handle of key to query
'MachinePreferredUILanguages', // address of name of value to query
nil, // reserved
@DataType, // address of buffer for value type
nil, // address of data buffer
@DataSize); // address of data buffer size
if Res <> ERROR_SUCCESS then
begin
ShowMessage(SysErrorMessage(Res));
Reg.CloseKey;
Reg.Free;
exit;
end;
if DataType <> REG_MULTI_SZ then
begin
ShowMessage('Wrong data type');
Reg.CloseKey;
Reg.Free;
exit;
end;
SetLength(Str, DataSize - 1);
if DataSize > 1 then
begin
Res := RegQueryValueEx(Reg.CurrentKey,
// handle of key to query
'MachinePreferredUILanguages',
// address of name of value to query
nil, // reserved
@DataType, // address of buffer for value type
PByte(Str), // address of data buffer
@DataSize); // address of data buffer size
if Res = ERROR_SUCCESS then
begin
for i := Length(Str) downto 1 do
if Str[i] = #0 then
Str[i] := #13;
Memo1.Text := Str;
end;
end;
finally
Reg.Free;
end;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 255