读取注册表键值的问题?(binary和DWord类型的)
大虾们:我的代码是这样写的但是访问binary类型的值时。老是无法reg.closekey
还有这个Dword类型的怎么访问。
怎么取到的binary类型和Dword类型的值转化为string.
function readvalue(myrootkey:hkey;key,value:string):string;
var
 Reg:TRegistry;
 myresult:variant;
 mybuffer:array of byte;
 mybuffersize:integer;
 reginfo:tregdatainfo;
 valuetype:TRegDatatype;
begin
 Reg:=TRegistry.Create;
 valuetype:=rdstring;
 //myresult:='';
 try
  try
   reg.RootKey:=myrootkey;
   if reg.OpenKey(key,false) then
    begin
     if reg.GetDataInfo(value,reginfo) then
      begin
       valuetype:=reginfo.RegData;
       case reginfo.RegData of
        rdstring:myresult:=reg.ReadString(value);
        rdbinary:
         begin
          setlength(mybuffer,reginfo.DataSize);
          myresult:=reg.ReadBinaryData(value,mybuffer,reginfo.DataSize);
         end;
        rdinteger:myresult:=reg.ReadInteger(value);
       end;
      end;
     //reg.CloseKey;
    end;
  except
  end;
 finally
  reg.CloseKey;
  reg.Free;
  case valuetype of
   rdstring: result:=myresult;
   rdbinary: result:=inttostr(myresult);
   rdinteger: result:=inttoStr(myresult);
  end;
 end;
end;

解决方案 »

  1.   

    //try
    uses Registry;function ReadValue(mRootKey: HKEY; mKey, mName: string): string;
    var
      vRegDataInfo: TRegDataInfo;
    begin
      Result := '';
      with TRegistry.Create do try
        RootKey := mRootKey;
        if not OpenKey(mKey, False) then Exit;
        GetDataInfo(mName, vRegDataInfo);
        case vRegDataInfo.RegData of
          rdUnknown: Exit;
          rdString, rdExpandString: Result := ReadString(mName);
          rdInteger: Result := IntToStr(ReadInteger(mName));
          rdBinary: begin
            SetLength(Result, vRegDataInfo.DataSize);
            ReadBinaryData(mName, Result[1], vRegDataInfo.DataSize);
          end;
        end;
      finally
        CloseKey;
        Free;
      end;
    end; { ReadValue }//二进制数据(BinaryData)不是一个数值,而是一个数据包~~