怎么得到*.dll/*.exe文件的Version?

解决方案 »

  1.   

    (*//
    标题:取得文件的版本信息
    说明:编译程序的时候不要忘记加上版本信息
    设计:Zswang
    日期:2002-09-12
    支持:[email protected]
    //*)///////Begin Source
    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 }
    ///////End Source///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vFileVersionInfomation: TFileVersionInfomation;
    begin
      if GetFileVersionInfomation(Application.ExeName, vFileVersionInfomation) then
        with vFileVersionInfomation do begin
          Memo1.Lines.Values['rCommpanyName'] := rCommpanyName;
          Memo1.Lines.Values['rFileDescription'] := rFileDescription;
          Memo1.Lines.Values['rFileVersion'] := rFileVersion;
          Memo1.Lines.Values['rInternalName'] := rInternalName;
          Memo1.Lines.Values['rLegalCopyright'] := rLegalCopyright;
          Memo1.Lines.Values['rLegalTrades'] := rLegalTrades;
          Memo1.Lines.Values['rOriginalFileName'] := rOriginalFileName;
          Memo1.Lines.Values['rProductName'] := rProductName;
          Memo1.Lines.Values['rProductVersion'] := rProductVersion;
          Memo1.Lines.Values['rComments'] := rComments;
    //      Memo1.Lines.Values['rVsFixedFileInfo'] := rVsFixedFileInfo;//
          Memo1.Lines.Values['rDefineValue'] := rDefineValue;
        end;
    end;
    ///////End Demo