假如:
360安全卫士;右键--属性--文件类型:应用程序。
描述:360安全卫士 (想获得此处的信息。)谢谢~

解决方案 »

  1.   

    用一个什么version xxx info 什么的API,具体忘了。
      

  2.   


    const
      InfoNum = 9;
      InfoStr: array[1..InfoNum] of string = (
      'ProductName',
      'ProductVersion',
      'FileDescription',
      'LegalCopyright',
      'FileVersion',
      'CompanyName',
      'LegalTradeMarks',
      'InternalName',
      'OriginalFileName'
      );
    var
      S: string;
      BufSize, Len: DWORD;
      Buf: PChar;
      Value: PChar;
    begin
      S := Application.ExeName;
      BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
      if BufSize > 0 then begin    Buf := AllocMem(BufSize);
        GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
          ProductName := Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
          ProductVersion := '产品版本: ' + Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
          FileDescription := '文件说明: ' + Value;  {你想要的文件说明}
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
          LegalCopyright := '合法版权: ' + Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
          FileVersion := '文件版本: ' + Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
          CompanyName := '公司名称: ' + Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
          LegalTrades := '合法商标: ' + Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
          InternalName := '内部名称: ' + Value;
        if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
          OriginalFilename := '原文件名: ' + Value;
        FreeMem(Buf, BufSize);
      end;
    end;
      

  3.   

    楼上的那个函数貌似只能获取Translation为080403A8也就是版本语言为简体中文程序的版本信息,如果是其它的Translation就无能为力了吧。我这里有一个函数,不是简体中文的也能获取,希望对你有用。
    type
      TFileInfo = packed record//软件版本等信息
        CommpanyName: 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;
    const
      SFInfo='\StringFileInfo\';
    var
      VersionInfo: Pointer;
      InfoSize: DWORD;
      InfoPointer: Pointer;
      Translation: Pointer;
      VersionValue: string;
      unused: DWORD;
    begin
      unused := 0;
      Result := False;
      InfoSize := GetFileVersionInfoSize(PChar(FileName),unused);
      if InfoSize > 0 then
      begin
        GetMem(VersionInfo, InfoSize);
        Result := GetFileVersionInfo(PChar(FileName),0,InfoSize,VersionInfo);
        if Result then
        begin
          VerQueryValue(VersionInfo,'\VarFileInfo\Translation',Translation,InfoSize);
          VersionValue := SFInfo + IntToHex(LoWord(Integer(Translation^)), 4) +
          IntToHex(HiWord(Integer(Translation^)), 4) + '\';
          VerQueryValue(VersionInfo, PChar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);
          info.CommpanyName := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);
          info.FileDescription := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);
          info.FileVersion := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'InternalName'), InfoPointer, InfoSize);
          info.InternalName := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);
          info.LegalCopyright := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize);
          info.LegalTrades := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);
          info.OriginalFileName := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductName'), InfoPointer, InfoSize);
          info.ProductName := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);
          info.ProductVersion := PChar(InfoPointer);
          VerQueryValue(VersionInfo, PChar(VersionValue + 'Comments'), InfoPointer, InfoSize);
          info.Comments := string(PChar(InfoPointer));
          if VerQueryValue(VersionInfo,'\',InfoPointer,InfoSize) then
            info.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);
          if UserDefine<>'' then
            if VerQueryValue(VersionInfo,PChar(VersionValue+UserDefine),InfoPointer,InfoSize) then
              info.UserDefineValue := string(PChar(InfoPointer));
        end;
        FreeMem(VersionInfo);
      end;
    end;