レジストリにバイナリを書き込むには?

解決


こま  2001-09-28 14:01:26  No: 188  IP: [192.*.*.*]

はじめまして。

早速質問ですが、レジストリにバイナリデータを書き込むにはどうすればよろしいのでしょうか?
ちなみにデータは、'FF,11,3B,A2,4d〜略'みたいな長い16進です。
WriteBinaryDataを使うのは分ったのですが・・・。

すみませんが、よろしくお願いします。

編集 削除
にしの  2001-09-28 15:31:24  No: 189  IP: [192.*.*.*]

WriteBinaryDataメソッドの存在がわかればあとは簡単です。
構文の説明についてはヘルプを見てください。
こんな感じです。

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  buf: array[0..9] of char;
  i: Integer;
begin
  for i:= 0 to 9 do buf[i] := char(i);

  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\Software\Test', True) then
    begin
      Reg.WriteBinaryData('Test', buf, 10);
    end;
  finally
    Reg.Free;
  end;
end;

編集 削除
こま  2001-09-30 18:41:23  No: 190  IP: [192.*.*.*]

返事遅くなりました。すみませんm(__)m

配列にするのですね!!
ちなみに、Pcharを使って、
var
  Reg: TRegistry.Create;
  buf: Pchar;
  dwSize: DWORD;
begin
  buf:= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';
  dwSize:= Length(buf);
    if Reg.OpenKey('\SoftWare', FALSE) then
      begin
        Reg.WriteBinaryData('TEST', buf^, dwSize);
        Reg.CloseKey;
        Reg.Free;
      end;
end;

とかは、ありなんですか?(ちょっと環境が今無くて・・。)
またまたご面倒をかけてしまいすみませんが、よろしくお願いします。m(__)m

編集 削除
にしの  2001-10-01 10:35:53  No: 191  IP: [192.*.*.*]

試していませんが、PCharへの格納以外はOKです。
# PCharはポインタなので、領域を確保してから格納してください

たとえば、
var strTemp: String;
を加えて、
strTemp := 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';
dwSize := Length(strTemp);
buf := PChar(strTemp);
とすると、この結果は、$#46(10進数で70、文字だと'F')が46バイト分書き込まれます。
$#ff(10進数で255)が23バイト分ではありません。
もし、後者の結果にしたいのなら、2バイトずつ区切って変換してから書き込むだけです。

編集 削除
こま  2001-10-02 17:37:14  No: 192  IP: [192.*.*.*]

返事が遅くなってしまって、すみません。m(__)m

2byte区切りが足りなかったみたいです。
ご丁寧なお返事ありがとうございました。
非常に助かりました。

また何かありましたら、よろしくお願いします。
では。

編集 削除