const offset = $000028A10; //$000347f8; 3.0.0 Soffset = $000347F8; //3.0z var F: TStream; Buf: array[0..19] of Char; begin if not (edt1.Text = '') then begin try F := TFileStream.Create(edt1.Text, fmOpenRead); F.Seek(soffset, soFromBeginning); f.Read(Buf, 19); if Buf = '(?' then begin F.Seek(offset, soFromBeginning); f.Read(Buf, 20); end; finally f.Free; end; mmo1.Lines.Add('现在的版本是' + buf); end; end; function ScanStream(mStream: TStream; mStr: string): Integer; //搜索流字符串 const cBufferSize = $8000; var S, T: string; L, I: Integer; begin Result := -1; if not Assigned(mStream) then Exit; if mStr = '' then Exit; L := Length(mStr); mStream.Position := 0; SetLength(S, cBufferSize); T := ''; for I := 1 to mStream.Size div cBufferSize do begin mStream.Read(S[1], cBufferSize); Result := Pos(mStr, T + S) - 1; //保留上次搜索的尾部字符~~ T := Copy(S, cBufferSize - L, MaxInt); if Result >= 0 then begin Result := Result + Pred(I) * cBufferSize - Length(T); Exit; end; end; I := mStream.Size mod cBufferSize; SetLength(S, I); if I > 0 then begin mStream.Read(S[1], I); Result := Pos(mStr, T + S) - 1; if Result >= 0 then begin Result := Result + mStream.Size - I - Length(T); Exit; end; end; end; { ScanStream }