はじめまして。
早速質問ですが、レジストリにバイナリデータを書き込むにはどうすればよろしいのでしょうか?
ちなみにデータは、'FF,11,3B,A2,4d〜略'みたいな長い16進です。
WriteBinaryDataを使うのは分ったのですが・・・。
すみませんが、よろしくお願いします。
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;
返事遅くなりました。すみません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
試していませんが、PCharへの格納以外はOKです。
# PCharはポインタなので、領域を確保してから格納してください
たとえば、
var strTemp: String;
を加えて、
strTemp := 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';
dwSize := Length(strTemp);
buf := PChar(strTemp);
とすると、この結果は、$#46(10進数で70、文字だと'F')が46バイト分書き込まれます。
$#ff(10進数で255)が23バイト分ではありません。
もし、後者の結果にしたいのなら、2バイトずつ区切って変換してから書き込むだけです。
返事が遅くなってしまって、すみません。m(__)m
2byte区切りが足りなかったみたいです。
ご丁寧なお返事ありがとうございました。
非常に助かりました。
また何かありましたら、よろしくお願いします。
では。
ツイート | ![]() |