请教高人啦啦啦~
文件 -》 属性 -》 版本 -》版权
等等等吧,我只要能读取版本信息中的某一个条目就行了,为的是在其中放置一个字符串,程序执行的时候可以读取它作为开关量,把只有个别细节差别的不同版本的程序用一个exe文件就实现了
多谢!

解决方案 »

  1.   

    GetFileVersionInfo函数被用来获取包含在指定文件中的版本信息。其Delphi函数声明如下: 
    function GetFileVersionInfo( 
    lptstrFilename: PChar; // 文件名 
    dwHandle: DWORD; // 忽略 
    dwLen: DWORD; // 缓冲区大小 
    lpData: Pointer // 版本信息缓冲区 
    ): BOOL; stdcall
      

  2.   

    Type   TFileVersionInfo   =   Record   
          FixedInfo:TVSFixedFileInfo;         {版本信息}   
          CompanyName:String;                         {公司名称}   
          FileDescription:String;                 {说明}   
          FileVersion:String;                         {文件版本}   
          InternalName:String;                       {内部名称}   
          LegalCopyright:String;                   {版权}   
          LegalTrades:String;                 {合法商标}   
          OriginalFilename:String;               {源文件名}   
          ProductName:String;                         {产品名称}   
          ProductVersion:String;                   {产品版本}   
          Comments:String;                               {备注}   
          LocalPort:String;                             {Local   UDP_Message   Port}   
      end;   
        
        
      Function   GetFileVerInfo(ExeFileName   :Pchar;var   VerSionInfo:TFileVersionInfo):Boolean;   
      var   
          dwHandle,   dwVersionSize       :   DWORD;   
          Find                                             :   String;   
          pcBuffer                                     :   PChar;   
          pTemp                                           :   Pointer;   
          FileVersionInfo                       :   TVSFixedFileInfo;   
      begin   
          Find   :=   '\';   
          dwVersionSize   :=   GetFileVersionInfoSize(   PChar(ExeFilename),dwHandle   );   
          if   dwVersionSize   =   0   then     begin   
              Result:=False;   
              Exit;   
          end;   
          GetMem(   pcBuffer,   dwVersionSize   );   
          if   not   GetFileVersionInfo(   PChar(ExeFilename),dwHandle,dwVersionSize,pcBuffer   )   then   begin   
              FreeMem(pcBuffer);   
              Result:=False;   
              Exit;   
          end;   
          if   not   VerQueryValue(   pcBuffer,PChar(Find),pTemp,dwVersionSize   )   then   begin   
              FreeMem(pcBuffer);   
              Result:=False;   
              Exit;   
          end;   
          FileVersionInfo:=PVSFixedFileInfo(pTemp)^;   
          With   FileVersionInfo   do   begin   
              VersionInfo.FixedInfo.dwSignature:=dwSignature;   
              VersionInfo.FixedInfo.dwStrucVersion:=dwStrucVersion;   
              VersionInfo.FixedInfo.dwFileVersionMS:=dwFileVersionMS;   
              VersionInfo.FixedInfo.dwFileVersionLS:=dwFileVersionLS;   
              VersionInfo.FixedInfo.dwProductVersionMS:=dwProductVersionMS;   
              VersionInfo.FixedInfo.dwProductVersionLS:=dwProductVersionLS;   
              VersionInfo.FixedInfo.dwFileFlagsMask:=FileVersionInfo.dwFileFlagsMask;   
              VersionInfo.FixedInfo.dwFileFlags:=fileVersionInfo.dwFileFlags;   
              VersionInfo.FixedInfo.dwFileOS:=FileVersionInfo.dwFileOS;   
              VersionInfo.FixedInfo.dwFileType:=FileVersionInfo.dwFileType;   
              VersionInfo.FixedInfo.dwFileSubtype:=FileVersionInfo.dwFileSubtype;   
              VersionInfo.FixedInfo.dwFileDateMS:=FileVersionInfo.dwFileDateMS;   
              VersionInfo.FixedInfo.dwFileDateLS:=FileVersionInfo.dwFileDateLS;   
          end;   
          Find   :=   '\StringFileInfo\080403A8\';   
          if   VerQueryValue(   pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize   )   then   
              VersionInfo.CompanyName:=PChar(pTemp)   
          else   begin   
              Find   :=   '\StringFileInfo\040904E4\';   
              if   VerQueryValue(   pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize   )   then   
                  VersionInfo.CompanyName:=PChar(pTemp)   
              else   begin   
                  Result:=False;   
                  Exit;   
              end;   
          end;   
          if   VerQueryValue(   pcBuffer,PChar(Find+'FileDescription'),pTemp,dwVersionSize   )   then   
              VersionInfo.FileDescription:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'FileVersion'),pTemp,dwVersionSize   )   then   
              VersionInfo.FileVersion:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'InternalName'),pTemp,dwVersionSize   )   then   
              VersionInfo.InternalName:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'LegalCopyright'),pTemp,dwVersionSize   )   then   
              VersionInfo.LegalCopyright:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'LegalTrades'),pTemp,dwVersionSize   )   then   
              VersionInfo.LegalTrades:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'OriginalFilename'),pTemp,dwVersionSize   )   then   
              VersionInfo.OriginalFilename:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'ProductName'),pTemp,dwVersionSize   )   then   
              VersionInfo.ProductName:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'ProductVersion'),pTemp,dwVersionSize   )   then   
              VersionInfo.ProductVersion:=PChar(pTemp);   
        
          if   VerQueryValue(   pcBuffer,PChar(Find+'Comments'),pTemp,dwVersionSize   )   then   
              VersionInfo.Comments:=PChar(pTemp);   
          if   VerQueryValue(   pcBuffer,PChar(Find+'LocalPort'),pTemp,dwVersionSize   )   then   
              VersionInfo.LocalPort:=PChar(pTemp)   
          else   
              VersionInfo.LocalPort:='66500';   
          FreeMem(pcBuffer   );   
          Result:=True;   
      end;   
    *****************************************************************************************************************从别人那儿抄来的,希望对你有帮助,呵呵。
      

  3.   

    GetVersionEx 
      

  4.   

    GetFileVersionInfoEx 
      

  5.   


    function TForm1.GetVersion:String;
    var
      sExe,FileVersion: string;
      iBytes: DWORD;
      Len: UINT;
      vTemp1, vTemp2: pchar;
    begin
      Result:='';
      sExe := Application.ExeName;
      iBytes := GetFileVersionInfoSize(PChar(sExe), iBytes);  if iBytes > 0 then
      begin
        vTemp1 := AllocMem(iBytes);    try
          GetFileVersionInfo(PChar(sExe), 0, iBytes, vTemp1);      if VerQueryValue(vTemp1, PChar('StringFileInfo\040403B6\FileVersion'), Pointer(vTemp2), Len) then
              FileVersion := vTemp2
          else
              FileVersion := '9.9.9.9';
            
        finally
            FreeMem(vTemp1, iBytes);
        end;
      end
      else
          FileVersion := '9.9.9.9';  Result:=FileVersion;
    end;