读取注册表键值的问题?(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;
大虾们:我的代码是这样写的但是访问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;
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)不是一个数值,而是一个数据包~~