读写入一个REG_MULTI_SZ的串,参数length要加2

解决方案 »

  1.   

    是用
    reg.readstring吗?
    能不能给我1个例子?
      

  2.   

    You have to parse it yourself.something like this:procedure TForm1.Button1Click(Sender: TObject);
    const
      Subkey: string = 'Hardware\description\system';
    var
      hkSB: HKEY;
      rType: LongInt;
      ValueSize, OrigSize: Longint;
      ValueBuf: array[0..1000] of char;
      procedure ParseValueBuf(const VersionType: string);
      var
        I, Line: Cardinal;
        S: string;
      begin
        i := 0;
        Line := 0;
        while ValueBuf[i] <> #0 do
        begin
          S := StrPas(@ValueBuf[i]); // move the Pchar into a string
          Inc(Line);
          Memo1.Lines.Append(Format('%s Line %d = %s',
            [VersionType, Line, S])); // add it to a Memo
          inc(i, Length(S) + 1); // to point to next sz, or to #0 if at end
        end;
      end;
    begin
      if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar(Subkey), 0, KEY_READ, hkSB) =
        ERROR_SUCCESS then
      try
        OrigSize := sizeof(ValueBuf);
        ValueSize := OrigSize;
        rType := REG_MULTI_SZ;
        if RegQueryValueEx(hkSB, 'SystemBiosVersion', nil, @rType,
          @ValueBuf, @ValueSize) = ERROR_SUCCESS then
          ParseValueBuf('System BIOS Version');    ValueSize := OrigSize;
        rType := REG_SZ;
        if RegQueryValueEx(hkSB, 'SystemBIOSDate', nil, @rType,
          @ValueBuf, @ValueSize) = ERROR_SUCCESS then
          Memo1.Lines.Append('System BIOS Date ' + ValueBuf);    ValueSize := OrigSize;
        rType := REG_MULTI_SZ;
        if RegQueryValueEx(hkSB, 'VideoBiosVersion', nil, @rType,
          @ValueBuf, @ValueSize) = ERROR_SUCCESS then
          ParseValueBuf('Video BIOS Version');    ValueSize := OrigSize;
        rType := REG_SZ;
        if RegQueryValueEx(hkSB, 'VideoBIOSDate', nil, @rType,
          @ValueBuf, @ValueSize) = ERROR_SUCCESS then
          Memo1.Lines.Append('Video BIOS Date ' + ValueBuf);
      finally
        RegCloseKey(hkSB);
      end;
    end;
      

  3.   

    之前回复给你的帖子中,使用了array of byte去读取
    这里用在multi_sz上也可以,可以读取键值中的16进制数据,通过转换就可以得到具体内容了