读取注册表键值:
var 
  Reg:TRegistry;
  buff: pchar;
  str: String;  
begin
  Reg := TRegistry.Create();
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  OpenKey('SYSTEM\MyKey,False);
  //Mykey里有一个多字符串值
  //'1111111111111'
  //'2222222222222'
  //'3333333333333'
  GetMem(buff,1024);
  Reg.ReadBinaryData('Bind',buff^,1024);
  //buff^里已经存储多字符串值
  str := strpas(buff);
  freemem(buf);
  reg.closekey;
  Reg.free;
end;
str只可以得到第一个串的值,我想得到多个串的值,怎么办?

解决方案 »

  1.   

    看看下面的方法能不能满足您的要求
    var
      Reg: TRegistry;
      Val: TStringList;
      I: Integer;
    begin
      Reg := TRegistry.Create;
      Val := TStringList.Create;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        Reg.OpenKey('System\MyKey',False);
        Reg.GetValueNames(Val);
        for I:=0 to Pred(Val.Count) do
          ShowMessage(Val.Strings[I]+'='+Reg.ReadString(Val.Strings[I]));
      finally
        Reg.Free;
        Val.Free;
     end;
    end;PS: ReadString 可以任意更改为其他方式如您的ReadBinaryData 或ReadInteger....
        
       
      

  2.   

    补充说明:上面的重点是GetValueNames
      

  3.   

    首先谢谢你的指导。另:我们可以存在些差异。
    System\MyKey下的Bind为多字符串键值。
    所以Reg.ReadString(Val.Strings[I])这个方法行不通!能帮我再想想办法吗?我上面用BinaryData可以将多串放在buff^里面,就是不知道下一步怎么将它分隔并变成string来操作,如果知道,还希望能告知,先谢谢了。
      

  4.   

    试下:
    var 
      Reg:TRegistry;
      buff: array[0..1024] of char;
      i:integer;
    begin
      Reg := TRegistry.Create();
      Reg.RootKey := HKEY_LOCAL_MACHINE;
      Reg.OpenKey('SYSTEM\MyKey',False);
      Reg.ReadBinaryData('Bind',buff,1024);
      Reg.closekey;
      Reg.Free;
      for i := 0 to 1024 do
      if (buff[i]=#0) and (buff[i+1]<>#0) then buff[i]:=' ';
      ShowMessage(buff);
    end;
      

  5.   

    哦。您看看我的理解是不是正确:您的MyKey下有一个值名为Bind的字串,它的类型是Reg_Binary ,是这样吗?如果是这样我马上给您答案。