unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Registry;type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
  var
    reg: TRegistry; { 声明Regstry对象 }
    typ: TRegDataType; { 数据类型[字符串类型(rdString)、数值类型(rdInteger)、二进制类型(rdBinary)] }
    str: string; { 用于显示操作信息 }
    i: integer; { 注册表的数据大小,以字节为单位 }
    vv: integer; { 注册表的数据内容 }
  begin
    reg := TRegistry.Create; { 创建注册表对象 }
    reg.RootKey := HKEY_LOCAL_MACHINE; { 设置根键 }
    reg.OpenKey('SOFTWARE\test', True); { 打开主键 }
    typ := reg.GetDataType('ccc'); { 得到所需数据的类型 }
    i := reg.GetDataSize('ccc'); { 得到所需数据的大小 }
    case typ of { 根据数据类型显示提示信息 }
      rdstring:
        str := '这个是字符串类型';
      rdInteger:
        str := '这个是数值类型';
      rdBinary:
        str := '这个是二进制类型';
    else
      str := '未知的数据类型';
    end;
    Memo1.Lines.Add(str);
    Memo1.Lines.Add(inttostr(i)); { 提示信息结束 }
    reg.ReadBinaryData('ccc', vv, i); { 读取数据的内容,函数返回数据内容的大小[本例中未写出返回值] }
    Memo1.Lines.Add(inttostr(vv));
    vv := 1; { 设定数据内容vv=1 }
    reg.WriteBinaryData('ccc', vv, i); { 把数据内容写入注册表中 }
    reg.CloseKey; { 关闭主键 }
    reg.Free; { 释放注册表对象 }
  end;
end.
我就是想把这二进制类型的数放到 meno1 里,然后点击按钮,就注入注册表:HKEY_LOCAL_MACHINE\SOFTWARE\test 里面。值是: key 
[HKEY_LOCAL_MACHINE\SOFTWARE\test]
"key"=hex:bf,31,36,30,98,14,02,92,61,41,ae,ac,c3,a9,b2,9a,19,96,a8,1c,e3,\
  08,03,c5,7f,e9,36,6e,80,3a,30,3a,c0,3b,1e,a3,6a,e4,41,84,87,54,d8,67,ed,8e,\
  34,c4,b1,7d,32,93,97,2b,f1,0f,93,71,38,1c,8e,47,23,11,08,a6,02,80,3f,9f,cf,\
  e7,f3,f9,f1,be,df,ef,77,3b,1d,8e,46,f7,50,27,93,c9,e4,71,38,1c,c9,bb,7a,cb,\
  ba,37,43,c9,fc,51,02,a8,bc,36,ce,01,17,23,b9,e9,d4,31,88,fc,02,e6,4d,95,9f,\
  c3,02,b5,cd,c2,51,cc,c6,a8,79,fe,ff,ff,ff,fe,ff,ff,ff,eb,9e,41,84,89,9b,2f,\
  7b,6a,0f,10,35,e7,ea,db,76,e3,a0,ae,e8,a6,1c,77,f2,76,48,ac,3c,f5,30,90,8e,\
  90,8f,9f,bb,c3,83,a9,bf,a2,a7,64,f4,b3,fd,98,79,fb,14,c8,f4,dc,88,a8,ae,59,\
  64,74,f0,55,1a,47,62,18,96,0f,6c,e8,c1,44,b6,67,aa,28,08,02,09,38,35,35,fd,\
  41,39,14,21,fd,6d,25,77,31,f3,6d,8e,60,6e,4e,02,41,28,cb,dd,0c,6a,c7,93,df,\
  db,8a,0f,a8,e5,5a,3b,dd,2f,d9,23,c1,81,74,82,d0,ae,a7,76,da,b2,86,9a,95,e7,\
  97,f0,c9,6c,df,07,f9,e7,c0,7b,d9,a1,3d,57,a5,e3,39,0d,78,55,fc,88,40,5f,cc,\
  b4,75,a9,4b,9d,59,fb,e6,fb,68,28,19,f0,72,2c,f8,13,2e,61,09,6a,62,e6,51,81,\
  91,61,32,f5,71,1b,af,d0,3d,5d,ab,86,10,cf,6e,02,d9,d8,3e,2e,0e,23,bd,16,f2,\
  74,58,75,01,a2,8b,69,0b,a6,6a,8d,c6,da,7b,e3,fa,5f,c3,fa,29,db,a4,6e,0a,95,\
  21,4a,d6,d6,1d,00,a9,48,e0,7b,71,52

解决方案 »

  1.   

    我按上面的代码编译后。在meno1 里输入那段代码。但是:meno1 里显示:未知的数据类型
    -1
    0
    弹出:failed to set data for 'ccc'
      

  2.   

    哈哈。大哥。昨天你的那个是可以了呀。现在是我是想改进一下。。
    就是不想内置那些二进制数在代码里。我想增加一个 meno1 , 编译后。然后我想在那些二进制的数复制到 meno1,然后点击按钮。就导入注册表。你看能可以吗?》帮我修正一下呀。。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, StrUtils, Registry;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var     meno1:string;
            mstr: string;
            mbuf: array of byte;
            mcount,i: integer;
            Reg: TRegistry;
    begin
            mstr := 'meno1';
            mstr := mstr + ',';
            mcount := (Length(mstr) div 3);
            SetLength(mbuf, mcount);
            for i:=0 to mcount-1 do
            begin
                    mbuf[i] := StrToInt('$'+LeftBStr(mstr,2));
                    Delete(mstr,1,3);
            end;        Reg := TRegistry.Create;
            Reg.RootKey := HKEY_LOCAL_MACHINE;
            if Reg.OpenKey('SOFTWARE\test', True) then
            begin
                    Reg.WriteBinaryData('key',mbuf[0],mcount);
                    Reg.CloseKey;
            end;        Reg.Free;
    end;end.
    这个是你昨晚帮搞好经过我修改增加了 meno1 ,换了内置二进制为 meno1, 好像不行。 按按钮时弹出:
    '$me'is not a valid integer value
      

  3.   

    直接把我昨天那个代码里改一下
    mstr := memo1.Lines.Text;
    再把回车换行都用StringReplace函数去掉。你这不是新手,乱用一通啊。