电脑爱好者之家

Delphi向注册表写入二进制数据的方法

时间:2012-12-10 21:13来源:未知 作者:熊猫蜀黍 点击:
procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer); WriteBinaryData(HistPaths,buf,0); 例如:将一个POP3Server的的值为pop.126.com 需要使用程序实现,将pop.126.com写进注册表,变成下面的值: POP3Server=hex:70,00,6f,00,70
procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer);

        WriteBinaryData('HistPaths',buf,0);


例如: 将一个POP3 Server的的值为 pop.126.com
需要使用程序实现,将 pop.126.com  写进注册表,变成下面的值:

"POP3 Server"=hex:70,00,6f,00,70,00,2e,00,31,00,32,00,36,00,2e,00,63,00,6f,00,\
  6d,00,00,00


先进行格式转换,即把
pop.126.com 
转换成:
hex:70,00,6f,00,70,00,2e,00,31,00,32,00,36,00,2e,00,63,00,6f,00,6d,00,00,00 
----------------------------------------------
转换为二进制
 

function StrToMyHex(const S:string):string;
var
  i:Integer;
  len:Integer;
begin
  len:=Length(S);
  if len>0 then
  begin
    Result:=Format('hex:%s,00',[IntToHex(Ord(S[1]),2)]);
    for i:=2 to len do
    begin
      Result:=Format('%s,%s,00',[Result,IntToHex(Ord(S[i]),2)]);
    end;
    Result:=Result+',00,00';
  end
  else
    Result:='';
end;


----------------------------------------------

uses
  Registry;
procedure TForm2.FormCreate(Sender: TObject);
var
  i,len:integer;
  Buf:array   of   byte;
  R:TRegistry;
  Str:WideString;
begin
  Str := 'pop.126.com';
  len:=length(Str);
  SetLength(Buf,(len+1)*sizeof(WideChar));
  fillchar( Buf[0],Length(buf),0);
//  for   i:=0   to   len-1     do
//  begin
//    Buf[i]:=ord(Str[i+1]);
//  end;
  Move( Byte(Str[1]),Buf[0],len*sizeof(WideChar));
  R:=TRegistry.Create;
  Try
    R.RootKey := HKEY_CURRENT_USER;
    if R.OpenKey('Software\test',Truethen
      try
        R.WriteBinaryData('Display Name',Buf[0],Length(Buf));
      finally
        R.CloseKey;
      end;
  Finally
    R.Free;
  End;
end;
(责任编辑:熊猫蜀黍)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片