Delphi - записать строку в раздел реестра Reg_Binary - PullRequest
2 голосов
/ 10 февраля 2010

Мне нужно преобразовать строку, чтобы записать ее в ключ 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;

Моя текущая тактика заключается в преобразовании TEdit.text с использованием IntToHex для значения Ord каждого символа. Это дает мне строку, которая выглядит как то, что я хочу написать ...

На данный момент я в тупике ...

Ответы [ 2 ]

6 голосов
/ 10 февраля 2010

Если вы хотите написать строку, то вам следует позвонить 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 отображает значение ключа для вас, он, вероятно, будет отображать каждый байт в шестнадцатеричном формате, но это просто формат отображения . Это не означает, что вы должны отформатировать данные таким образом, прежде чем добавлять их в реестр.

2 голосов
/ 10 февраля 2010

Конечно, предполагается, что ваша строка содержит только ANSI-данные, но если вы пытаетесь записать строку в значение реестра в виде двоичного значения, то будут работать следующие изменения в вашей логике:

var
  EdStr : AnsiString;
:
  EdStr := AnsiString(Edit1.Text); // de-unicode
  reg.WriteBinaryData('SomeKey', EdStr[1], Length(EdStr));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...