Delphi - 将字符串写入Reg_Binary注册表项

时间:2010-02-10 18:25:48

标签: delphi registry

我需要转换一个字符串,将其写入registry.reg_binary键。

我有写入密钥的基本代码,如下所示:

try
   rootkey := HKEY_CURRENT_USER;
   if OpenKey(Key, False) then
   begin
      reg.WriteBinaryData('SomeKey', SomeValue, Length(SomeVale));
      CloseKey;
   end;
finally
   reg.Free;
end;

在上文中, SomeValue 需要是TEdit文本字段的十六进制值;

我目前的方法是使用IntToHex在每个字符的Ord值上转换TEdit.text。这给了我一个看起来像我想写的字符串...

此时我很难过......

2 个答案:

答案 0 :(得分:6)

如果你想写一个字符串,那么你应该调用WriteString

reg.WriteString('SomeKey', SomeValue);

如果您有整数,请拨打WriteInteger

IntValue := StrToInt(SomeValue);
reg.WriteInteger('SomeKey', IntValue);

如果你有真正的二进制数据,那么它应该是什么样子 - 十六进制或其他什么。致电WriteBinaryData并完成它。数据的实际外观并不重要,因为您不必以该格式读取数据。稍后您将使用ReadBinaryData阅读它,它将使用您编写它们时所具有的格式填充缓冲区。

IntValue := StrToInt(SomeValue);
reg.WriteBinaryValue('SomeKey', IntValue, SizeOf(IntValue));

这会将整数的所有四个字节作为二进制值写入注册表。

当Windows注册表编辑器向您显示键的值时,它可能会以十六进制显示每个字节,但这只是显示格式。这并不意味着您必须在将数据添加到注册表之前对其进行格式化。

答案 1 :(得分:2)

当然这假设你的字符串只包含ansi数据, 但如果您尝试将字符串写入注册表值作为二进制值,那么对您的逻辑的以下更改将起作用:

var
  EdStr : AnsiString;
:
  EdStr := AnsiString(Edit1.Text); // de-unicode
  reg.WriteBinaryData('SomeKey', EdStr[1], Length(EdStr));