例如: 将一个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各个字母都转换为二进制值,例如 p转换为 "70",o转换为"6f",等。但是后面还要添加每个字符转后后还要添加 00,最后还要添加 两个 "00",我的部分程序如下:var
i,len:integer;
Buf:array of byte;
R:TRegistry;
Str:String;
begin
len:=length(Str);
SetLength(Buf,len);
for i:=0 to len-1 do
begin
s:= Str[i+1];
Buf[i]:=ord(Str[i+1]);
end;
R:=TRegistry.Create;
R.RootKey := HKEY_CURRENT_USER;
Try
if R.OpenKey('Software\test',True) then
R.WriteBinaryData('Display Name',Buf,Sizeof(Buf));
finally
R.CloseKey;
R.Free;但是结果却不对,请各位高手帮忙看看,如何实现,谢谢!
需要使用程序实现,将 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各个字母都转换为二进制值,例如 p转换为 "70",o转换为"6f",等。但是后面还要添加每个字符转后后还要添加 00,最后还要添加 两个 "00",我的部分程序如下:var
i,len:integer;
Buf:array of byte;
R:TRegistry;
Str:String;
begin
len:=length(Str);
SetLength(Buf,len);
for i:=0 to len-1 do
begin
s:= Str[i+1];
Buf[i]:=ord(Str[i+1]);
end;
R:=TRegistry.Create;
R.RootKey := HKEY_CURRENT_USER;
Try
if R.OpenKey('Software\test',True) then
R.WriteBinaryData('Display Name',Buf,Sizeof(Buf));
finally
R.CloseKey;
R.Free;但是结果却不对,请各位高手帮忙看看,如何实现,谢谢!
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;
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',True) then
try
R.WriteBinaryData('Display Name',Buf[0],Length(Buf));
finally
R.CloseKey;
end;
Finally
R.Free;
End;
end;
Registry;
procedure TForm2.FormCreate(Sender: TObject);
var
i,len:integer;
R:TRegistry;
Str:WideString;//使用Unicode
begin
Str := 'pop.126.com';
// for i:=0 to len-1 do
// begin
// Buf[i]:=ord(Str[i+1]);
// end;
R:=TRegistry.Create;
Try
R.RootKey := HKEY_CURRENT_USER;
if R.OpenKey('Software\test',True) then
try
R.WriteBinaryData('Display Name',Str[1],(Length(Str)+1(*加上串结束符$0000*))*sizeof(WideChar(*按宽字符计算字节数*)));
finally
R.CloseKey;
end;
Finally
R.Free;
End;
end;
"Display Name"=hex:6c,6f,72,65,6e,00,00,00,04,06,46,00WideString:
"Display Name"=hex:6c,00,6f,00,72,00,65,00,6e,00,00,00
Str:WideString;//可以正确实现但是Str:String;
运行的结果却不对啊?