怎么取程序的版本号!比如说我的程序目前编译的版本号为1.0.1.1,怎样将它取出!

解决方案 »

  1.   

    定一个版本信息结构: 
    typePFixedFileInfo = ^TFixedFileInfo;TFixedFileInfo = recorddwSignature : DWORD;dwStrucVersion : DWORD;wFileVersionMS : WORD; // 次版本号wFileVersionLS : WORD; // 主版本号wProductVersionMS : WORD; // 建立次数(build)wProductVersionLS : WORD; // 发行次数(release)dwFileFlagsMask : DWORD;dwFileFlags : DWORD;dwFileOS : DWORD;dwFileType : DWORD;dwFileSubtype : DWORD;dwFileDateMS : DWORD;dwFileDateLS : DWORD;end; // TFixedFileInfo 下面是取版本信息函数function FileInfo( const FileName :String ) : TFixedFileInfo;vardwHandle, dwVersionSize : DWORD;strSubBlock : String;pTemp : Pointer;pData : Pointer;beginstrSubBlock := ';// 取得文件版本信息的大小dwVersionSize := GetFileVersionInfoSize( PChar( FileName ), dwHandle ); if dwVersionSize <> 0 thenbeginGetMem( pTemp, dwVersionSize );try//取文件版本信息if GetFileVersionInfo( PChar( FileName ),dwHandle,dwVersionSize,pTemp ) then//查询文件版本信息if VerQueryValue( pTemp,PChar( strSubBlock ),pData,dwVersionSize ) thenResult := PFixedFileInfo( pData )^;finallyFreeMem( pTemp );end; // tryend; // if dwVersionSizeend;调用例子:varf1:string;x :TFixedFileInfo;beginf1 := Application.ExeName;x := FileInfo( f1 );ShowMessage( f1 +#13#10'Version: ' + IntToStr( x.wFileVersionLS ) + '.' +IntToStr( x.wFileVersionMS ) +#13#10'Release: ' + IntToStr( x.wProductVersionLS) +#13#10'Build: ' + IntToStr( x.wProductVersionMS ) );end;**********************************获取文件版本信息typeTFileInfo = packed recordCommpanyName: string;FileDescription: string;FileVersion: string;InternalName: string;LegalCopyright: string;LegalTrades: string;OriginalFileName: string;ProductName: string;ProductVersion: string;Comments: string;VsFixedFileInfo:VS_FIXEDFILEINFO;UserDefineValue:string;end;function GetFileVersionInfomation(const FileName: string; var info: TFileInfo;UserDefine:string=''):boolean;constSFInfo= ';varVersionInfo: Pointer;InfoSize: DWORD;InfoPointer: Pointer;Translation: Pointer;VersionValue: string;unused: DWORD;beginunused := 0;Result := False;InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);if InfoSize > 0 thenbeginGetMem(VersionInfo, InfoSize);Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);if Result thenbeginVerQueryValue(VersionInfo, '', Translation, InfoSize);VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) +IntToHex(HiWord(Longint(Translation^)), 4) + ';VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);info.CommpanyName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);info.FileDescription := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);info.FileVersion := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize);info.InternalName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);info.LegalCopyright := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize);info.LegalTrades := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);info.OriginalFileName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize);info.ProductName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);info.ProductVersion := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize);info.Comments := string(pchar(InfoPointer));if VerQueryValue(VersionInfo, ', InfoPointer, InfoSize) theninfo.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);if UserDefine<>'' thenbeginif VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize) theninfo.UserDefineValue:=string(pchar(InfoPointer));end;end;FreeMem(VersionInfo);end;end;调用演示:procedure TForm1.Button1Click(Sender: TObject);varinfo: TFileInfo;beginif OpenDialog1.Execute thenbeginif GetFileVersionInfomation(opendialog1.FileName, info,'WOW Version') thenbeginListbox1.Items.Add(OpenDialog1.FileName);ListBox1.Items.Add('Comments:' + info.Comments);ListBox1.Items.Add('CommpanyName:' + info.CommpanyName);ListBox1.Items.Add('FileDescription:' + info.FileDescription);ListBox1.Items.Add('FileVersion:' + info.FileVersion);ListBox1.Items.Add('InternalName:' + info.InternalName);ListBox1.Items.Add('LegalCopyright:' + info.LegalCopyright);ListBox1.Items.Add('LegalTrades:' + info.LegalTrades);ListBox1.Items.Add('OriginalFileName:' + info.OriginalFileName);ListBox1.Items.Add('ProductName:' + info.ProductName);ListBox1.Items.Add('ProductVersion:' + info.ProductVersion);ListBox1.Items.Add('UserDefineValue:' + info.UserDefineValue);if boolean(info.VsFixedFileInfo.dwFileFlags and vs_FF_Debug) thenlistbox1.Items.Add('Debug:True')elseListBox1.Items.Add('Debug:False');ListBox1.Items.Add('');end;end;end;
      

  2.   

    //我来贴一个自己写的~~
    type
      TFileVersionInfomation = record
        rCommpanyName: string;
        rFileDescription: string;
        rFileVersion: string;
        rInternalName: string;
        rLegalCopyright: string;
        rLegalTrades: string;
        rOriginalFileName: string;
        rProductName: string;
        rProductVersion: string;
        rComments: string;
        rVsFixedFileInfo: VS_FIXEDFILEINFO;
        rDefineValue: string;
      end;function GetFileVersionInfomation(mFileName: TFileName;
      var nFileVersionInfomation: TFileVersionInfomation;
      mDefineName: string = ''): Boolean;
    var
      vHandle: Cardinal;
      vInfoSize: Cardinal;
      vVersionInfo: Pointer;
      vTranslation: Pointer;
      vVersionValue: string;
      vInfoPointer: Pointer;
    begin
      Result := False;
      vInfoSize := GetFileVersionInfoSize(PChar(mFileName), vHandle); //取得文件版本信息空间及资源句柄
      FillChar(nFileVersionInfomation, SizeOf(nFileVersionInfomation), 0); //初始化返回信息
      if vInfoSize <= 0 then Exit; //安全检查  GetMem(vVersionInfo, vInfoSize); //分配资源
      with nFileVersionInfomation do try
        if not GetFileVersionInfo(PChar(mFileName),
          vHandle, vInfoSize, vVersionInfo) then Exit;
        VerQueryValue(vVersionInfo, '\VarFileInfo\Translation',
          vTranslation, vInfoSize);
        vVersionValue := Format('\StringFileInfo\%.4x%.4x\',
          [LOWORD(Longint(vTranslation^)), HIWORD(Longint(vTranslation^))]);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'CompanyName'),
          vInfoPointer, vInfoSize);
        rCommpanyName := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'FileDescription'),
          vInfoPointer, vInfoSize);
        rFileDescription := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'FileVersion'),
          vInfoPointer, vInfoSize);
        rFileVersion := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'InternalName'),
          vInfoPointer, vInfoSize);
        rInternalName := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'LegalCopyright'),
          vInfoPointer, vInfoSize);
        rLegalCopyright := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'LegalTrades'),
          vInfoPointer, vInfoSize);
        rLegalTrades := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'OriginalFileName'),
          vInfoPointer, vInfoSize);
        rOriginalFileName := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'ProductName'),
          vInfoPointer, vInfoSize);
        rProductName := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'ProductVersion'),
          vInfoPointer, vInfoSize);
        rProductVersion := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, PChar(vVersionValue + 'Comments'),
          vInfoPointer, vInfoSize);
        rComments := PChar(vInfoPointer);
        VerQueryValue(vVersionInfo, '\', vInfoPointer, vInfoSize);
        rVsFixedFileInfo := TVSFixedFileInfo(vInfoPointer^);
        if mDefineName <> '' then begin
          VerQueryValue(vVersionInfo, PChar(vVersionValue + mDefineName),
            vInfoPointer, vInfoSize);
          rDefineValue := PChar(vInfoPointer);
        end else rDefineValue := '';
      finally
        FreeMem(vVersionInfo, vInfoSize);
      end;
      Result := True;
    end; { GetFileVersionInfomation }