要求获取各种文件的版本信息
没有版本信息就返回版本为'0'
如: Exe 文件且有版本信息的话 返回版本字符串,如: 1.0.2.2
.txt 文件,返回 '0'

解决方案 »

  1.   

    function GetVersion(filename:string):string;
    var
      InfoSize, Wnd: DWORD;
      VerBuf: Pointer;
      szName: array[0..255] of Char;
      Value: Pointer;
      Len: UINT;
      TransString:string;
    begin
      InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
      if InfoSize <> 0 then
      begin
        GetMem(VerBuf, InfoSize);
        try
          if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
          begin
            Value :=nil;
            VerQueryValue(VerBuf, '\VarFileInfo\Translation', Value, Len);
            if Value <> nil then
               TransString := IntToHex(MakeLong(HiWord(Longint(Value^)), LoWord(Longint(Value^))), 8);
            Result := '';
            StrPCopy(szName, '\StringFileInfo\'+Transstring+'\FileVersion');
                                                             ^^^^^^^此处换成ProductVersion得到的是"产品版本"
            if VerQueryValue(VerBuf, szName, Value, Len) then
               Result := StrPas(PChar(Value));
          end;
        finally
          FreeMem(VerBuf);
        end;
      end;
    end;