delphi 如何读取EXE,DLL文件的详细信息(亲测可用)  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 如何读取EXE,DLL文件的详细信息(亲测可用)


type

  TEXEVersionData = record

    CompanyName,

    FileDescription,

    FileVersion,

    InternalName,

    LegalCopyright,

    LegalTrademarks,

    OriginalFileName,

    ProductName,

    ProductVersion,

    Comments,

    PrivateBuild,

    SpecialBuild: string;

  end;


function GetEXEVersionData(const FileName: string): TEXEVersionData;

type

  PLandCodepage = ^TLandCodepage;

  TLandCodepage = record

    wLanguage,

    wCodePage: word;

  end;

var

  dummy,

  len: cardinal;

  buf, pntr: pointer;

  lang: string;

begin

  len := GetFileVersionInfoSize(PChar(FileName), dummy);

  if len = 0 then

    RaiseLastOSError;

  GetMem(buf, len);

  try

    if not GetFileVersionInfo(PChar(FileName), 0, len, buf) then

      RaiseLastOSError;


    if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len) then

      RaiseLastOSError;


    lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]);


    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\CompanyName'), pntr, len){ and (@len <> nil)} then

      result.CompanyName := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\FileDescription'), pntr, len){ and (@len <> nil)} then

      result.FileDescription := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\FileVersion'), pntr, len){ and (@len <> nil)} then

      result.FileVersion := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\InternalName'), pntr, len){ and (@len <> nil)} then

      result.InternalName := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\LegalCopyright'), pntr, len){ and (@len <> nil)} then

      result.LegalCopyright := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\LegalTrademarks'), pntr, len){ and (@len <> nil)} then

      result.LegalTrademarks := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\OriginalFileName'), pntr, len){ and (@len <> nil)} then

      result.OriginalFileName := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\ProductName'), pntr, len){ and (@len <> nil)} then

      result.ProductName := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\ProductVersion'), pntr, len){ and (@len <> nil)} then

      result.ProductVersion := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\Comments'), pntr, len){ and (@len <> nil)} then

      result.Comments := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\PrivateBuild'), pntr, len){ and (@len <> nil)} then

      result.PrivateBuild := PChar(pntr);

    if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\SpecialBuild'), pntr, len){ and (@len <> nil)} then

      result.SpecialBuild := PChar(pntr);

  finally

    FreeMem(buf);

  end;

end;



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.034953117370605 seconds