送分啊:对注册表的二进制数据的读写修改在delphi中要如何操作?(10分)

  • 主题发起人 主题发起人 djrj
  • 开始时间 开始时间
D

djrj

Unregistered / Unconfirmed
GUEST, unregistred user!
[8D]请问对注册表的二进制数据的读写在delphi中要如何操作?
我用的是WriteBinaryData(const Name: String; var Buffer; BufSize: Integer) 和 ReadBinaryData(const Name: String; var Buffer; BufSize: Integer),但却不知要怎样定义var和Bufsize

比如在HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer下有一个名为NoSaveSettings键值名,其数值是00 00 00 01,我如何将其值改为别的值呢???最好给个例程!
 
难道没人会吗?
高手何在?
分数不够可以再加啊,一切好商量。
 
高手都去吃饭了!
这个调用好象帮助里说的挺清楚的嘛,
BUFFER可以是很多类型,自定义也行,
例如:
buffer:array [0..255]of char;
然后SIZE用sizeof得到,例如:
sizeof(buffer)
注意把空间留够。
举例如:
StrCopy(buffer,pchar('你的数据'));
WriteBinaryData ('yourname',buffer,sizeof(buffer));
 
10分……果然是送的。
大哥,搜索一下以前的贴子,保证找到N个类似的答案。
 
没人愿答吗?这分就要送了?-_-
另:我新建一个名为(默认)的字符串数据,结果与注册表里本来就存在的(默认)一样???
怎样才能把注册表里的本来就存在的键值名为(默认)的数据值改为我所需要的数据呢?
 
var
Reg : TRegistry;
Buf : array [1..4] of Byte; //因为你写入的数据是00 00 00 01,四个字节,所以数组大小定义为4了;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer', True);
//这里给数组赋值,对应关系看下面
// 00 00 00 01
// Buf[1] Buf[2] Buf[3] Buf[4]
Buf[1] := 00;
Buf[2] := 00;
Buf[3] := 00;
Buf[4] := 01;
Reg.WriteBinaryData('NoSaveSettings', Buf , SizeOf(Buf));
//WriteBinaryData的第三个参数是你要写入的节字数大小,SizeOf(Buf)是得到数组Buf的大小(即是4)。
//如果你将这句改为
//Reg.WriteBinaryData('NoSaveSettings', Buf , 2);
//那么写入的只是Buf[1]和Buf[2],如果打开注册表看,这个键的值是00 00
finally
Reg.Free;
end;

var
Reg : TRegistry;
Buf : array [1..4] of Byte;
BufSize: Integer;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer', True);
BufSize := Reg.GetDataSize('NoSaveSettings');
if BufSize <> -1 then
Reg.ReadBinaryData('NoSaveSettings', Buf , BufSize);
//.............
finally
Reg.Free;
end;

我想这已经很说细的了,如果你真的认为我回答得好,就多给点分,有什么问题可以再问。
 
To:Writer
我基本接受你的答案了。但测试中出现一点小问题:
我新建了一个空白工程,只添加了一个Button控件,在Button控件的单击事件中加入你的上面的代码,
编译时出现如下提示:
[Error] Unit1.pas(52): ';' expected but '.' found
[Error] Unit1.pas(54): Declaration expected but end of file found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
我把代码中的try和finally两个单词去掉以后,就能正常编译了,执行结果也正确。
还请您告诉小弟一下这是什么原因,我即刻把分数双手捧上!!!
 
<<我基本接受你的答案了
看到你给这样的答复,我感到失望。
<<编译时出现如下提示
<<[Error] Unit1.pas(52): ';' expected but '.' found
<<[Error] Unit1.pas(54): Declaration expected but end of file found
<<[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
说真的,如果出现这样的错误,会PASCAL的都不会不知出现什么问题。
ry...finally,finally要用end;结束,你把他们DEL了,不能确保REG最后能FREE。
有begin,没end。这是因为你粘贴时也把BEGIN的END也选定了。

SIGH……10分,哈哈哈哈哈哈
 
谢谢Write,
希望以后可以向你继续提问,
当然会给money的。
 
后退
顶部