各位高手,我是个初学者,想请教一下注册表里的REG_DWORD类型和REG_BINARY的数据如何用WriteBinaryData()写。

解决方案 »

  1.   

    例子:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      reg, reg1: TRegistry;
      info: TRegDataInfo;
      buf: PByteArray;
      bufSize: Integer;
      ValueName: string;
    begin
      reg := TRegistry.Create;
      reg1 := TRegistry.Create;
      try
        reg.RootKey := HKEY_CLASSES_ROOT;
        reg1.RootKey := HKEY_CLASSES_ROOT;
        if reg.OpenKey('\DelphiProject\Shell\Open\command', True) and
           reg1.OpenKey('\DelphiProject\Shell\Open\dpr', True) then
        begin
          ValueName := 'Data1';  你这句话在编译时出错,请帮助!!!!!!!!!!!
          reg.GetDataInfo(ValueName, info);
          case info.RegData of
            rdString:    // 字符串
              begin
                reg1.WriteString(ValueName, reg.ReadString(ValueName));
                reg.DeleteValue(ValueName);
              end;
            rdInteger:   // DWORD
              begin
                reg1.WriteInteger(ValueName, reg.ReadInteger(ValueName));
                reg.DeleteValue(ValueName);
              end;
            rdBinary:    // 二进制
              begin
                bufSize := info.DataSize;
                if bufSize > 0 then begin
                  buf := AllocMem(bufSize);
                  reg.ReadBinaryData(ValueName, buf^, bufSize);
                  reg1.WriteBinaryData(ValueName, buf^, bufSize);
                  FreeMem(buf, bufSize);
                  reg.DeleteValue(ValueName);
                end;
              end;
          end;
          reg.CloseKey;
        end;
      finally
        reg.Free;
      end;
    end;