下面的代码很简单,就是从注册表中读取一个二进制的数据,但是总是出现非法错误,为什么,如何解决?
var
reg:tregistry;
buf:array of byte; //动态数组
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
setlength(buf,4); //设置动态数组的长度
try
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
if reg.ValueExists('NoDriveTypeAutoRun') then
reg.ReadBinaryData('NoDriveTypeAutoRun',buf,sizeof(buf));
finally
setlength(buf,0); //在这儿出现错误,
reg.Free; //如果把上面的去掉,这儿会出现错误。
end;
end;那么该如何读取二进制的数据?
回复贴子:
Kingron(WinAPI) 回复于2001-2-17 13:14:00 得0分
救命啊!
问题提前
Kingron(WinAPI) 回复于2001-2-17 13:38:00 得0分
看的人多,回答的人少,分数应该不少了啊?
lwm8246(lwm8246) 回复于2001-2-17 14:25:00 得20分
试试:var
reg:tregistry;
buf:array of byte; //动态数组
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
setlength(buf,4); //设置动态数组的长度
try
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
if reg.ValueExists('NoDriveTypeAutoRun') then
// reg.ReadBinaryData('NoDriveTypeAutoRun',buf,sizeof(buf));
reg.ReadBinaryData('NoDriveTypeAutoRun',buf[1],sizeof(buf));
finally
setlength(buf,0); //在这儿出现错误,
reg.Free; //如果把上面的去掉,这儿会出现错误。
end;
end;
AllError(错误大全) 回复于2001-2-17 14:43:00 得0分
用reg.GetDataType('NoDriveTypeAutoRun');可知'NoDriveTypeAutoRun'
不是二进制的而是integer型的所以应是var
reg:tregistry;
buf:array of byte; //动态数组
i:integer;
s:TRegDataType;
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
setlength(buf,10); //设置动态数组的长度
try
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
if reg.ValueExists('NoDriveTypeAutoRun') then
begin
s:=reg.GetDataType('NoDriveTypeAutoRun');
i:=reg.readinteger('NoDriveTypeAutoRun');
end;
finally
setlength(buf,0);
reg.Free;
end;
end;
Kingron(WinAPI) 回复于2001-2-17 16:46:00 得0分
2 lwm8246(lwm8246) :
英雄所见略同!呵呵,但是我急昏了头,急着提了问题,后来自己搞定了!你的方法是正确的,不过要指出的是,不是从[1]开始,应该从[0]开始!
同样给分。
lwm8246(lwm8246) 回复于2001-2-17 22:57:00 得0分
不好意思。谢谢指教.
lwm8246(lwm8246) 回复于2001-2-17 22:58:00 得0分
不好意思。谢谢指教.
var
reg:tregistry;
buf:array of byte; //动态数组
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
setlength(buf,4); //设置动态数组的长度
try
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
if reg.ValueExists('NoDriveTypeAutoRun') then
reg.ReadBinaryData('NoDriveTypeAutoRun',buf,sizeof(buf));
finally
setlength(buf,0); //在这儿出现错误,
reg.Free; //如果把上面的去掉,这儿会出现错误。
end;
end;那么该如何读取二进制的数据?
回复贴子:
Kingron(WinAPI) 回复于2001-2-17 13:14:00 得0分
救命啊!
问题提前
Kingron(WinAPI) 回复于2001-2-17 13:38:00 得0分
看的人多,回答的人少,分数应该不少了啊?
lwm8246(lwm8246) 回复于2001-2-17 14:25:00 得20分
试试:var
reg:tregistry;
buf:array of byte; //动态数组
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
setlength(buf,4); //设置动态数组的长度
try
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
if reg.ValueExists('NoDriveTypeAutoRun') then
// reg.ReadBinaryData('NoDriveTypeAutoRun',buf,sizeof(buf));
reg.ReadBinaryData('NoDriveTypeAutoRun',buf[1],sizeof(buf));
finally
setlength(buf,0); //在这儿出现错误,
reg.Free; //如果把上面的去掉,这儿会出现错误。
end;
end;
AllError(错误大全) 回复于2001-2-17 14:43:00 得0分
用reg.GetDataType('NoDriveTypeAutoRun');可知'NoDriveTypeAutoRun'
不是二进制的而是integer型的所以应是var
reg:tregistry;
buf:array of byte; //动态数组
i:integer;
s:TRegDataType;
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
setlength(buf,10); //设置动态数组的长度
try
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
if reg.ValueExists('NoDriveTypeAutoRun') then
begin
s:=reg.GetDataType('NoDriveTypeAutoRun');
i:=reg.readinteger('NoDriveTypeAutoRun');
end;
finally
setlength(buf,0);
reg.Free;
end;
end;
Kingron(WinAPI) 回复于2001-2-17 16:46:00 得0分
2 lwm8246(lwm8246) :
英雄所见略同!呵呵,但是我急昏了头,急着提了问题,后来自己搞定了!你的方法是正确的,不过要指出的是,不是从[1]开始,应该从[0]开始!
同样给分。
lwm8246(lwm8246) 回复于2001-2-17 22:57:00 得0分
不好意思。谢谢指教.
lwm8246(lwm8246) 回复于2001-2-17 22:58:00 得0分
不好意思。谢谢指教.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货