procedure WriteREG_MULTI_SZ(const Name, Value: string;
  const Registry: TRegistry);
var
  p, buffer: PChar;
  i: Integer;
  Size: DWORD;
  aStrings: TStringList;
begin
  Size := 0;
  aStrings := TStringList.Create;
  aStrings.Text := Value;
  try
    for i := 0 to aStrings.Count - 1 do
      inc(Size, length(aStrings[i]) + 1);
    inc(Size);
    Size := Size * SizeOf(Char);
    GetMem(buffer, Size);
    try
      p := buffer;
      for i := 0 to aStrings.Count - 1 do
      begin
        StrCopy(p, PChar(aStrings[i]));
        inc(PChar(p), length(p) + 1);
      end;
      p^ := #0;
      SetLastError(RegSetValueEx(Registry.CurrentKey, PChar(Name), 0, REG_MULTI_SZ, buffer, Size));
      if GetLastError <> ERROR_SUCCESS then
        raise Exception.Create('Unable to write MULTI_SZ value');
    finally
      FreeMem(buffer)
    end
  finally
    aStrings.Free;
  end;
end;

posted on 2011-01-15 08:13  fyen  阅读(1101)  评论(0编辑  收藏  举报