На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Информация о версии исполняемого файла
      Полно примеров о том как извлечь сведения о версии исполняемого файла, но большинство из них сводится только к получению информации о самой версии. В этом примере работа идет с Unicode функциями, при желании можно переделать под Ansi вариант, кому как удобнее. :)

      ExpandedWrap disabled
        type
          PStringFileInfoW = ^TStringFileInfoW;
          TStringFileInfoW = packed record
            pszCompanyName     : WideString;
            pszFileDescription : WideString;
            pszFileVersion     : WideString;
            pszInternalName    : WideString;
            pszLegalCopyright  : WideString;
            pszLegalTrademarks : WideString;
            pszOriginalFilename: WideString;
            pszProductName     : WideString;
            pszProductVersion  : WideString;
            pszComments        : WideString;
            pszPrivateBuild    : WideString;
            pszSpecialBuild    : WideString;
            pszLanguageName    : WideString;
            pszLanguageID      : WideString;
          end;
         
        procedure GetFileInfoW(pszPath: WideString; var sfi: TStringFileInfoW);
        const
          AQueryValue: Array [1..14] of WideString = (
            'CompanyName',
            'FileDescription',
            'FileVersion',
            'InternalName',
            'LegalCopyright',
            'LegalTrademarks',
            'OriginalFileName',
            'ProductName',
            'ProductVersion',
            'Comments',
            'PrivateBuild',
            'SpecialBuild',
            'LanguageName',
            'LanguageID'
          );
        type
          TChrSet = Array [0..1] of Word;
          PChrset = ^TChrSet;
        var
          pcValue : PChrSet;
          iAppSize: DWORD;
          pcBuf   : Pointer;
          puLen   : DWORD;
          pszLng  : WideString;
         
          function GetFileInfoProcW(pszValue: WideString): WideString;
          var
            pszBlock: WideString;
            pInfo   : Pointer;
          begin
            pszBlock := FormatW('\StringFileInfo\%s\%s', [pszLng, pszValue]);
            if VerQueryValueW(pcBuf, @pszBlock[1], pInfo, puLen) then
              Result := PWideChar(pInfo)
            else
              Result := '';
          end;
         
        begin
          iAppSize := GetFileVersionInfoSizeW(@pszPath[1], iAppSize);
          if (iAppSize > 0) then
          try
            pcBuf := HeapAlloc(GetProcessHeap, HEAP_ZERO_MEMORY, iAppSize);
            GetFileVersionInfoW(@pszPath[1], 0, iAppSize, pcBuf);
            VerQueryValueW(pcBuf, '\VarFileInfo\Translation', Pointer(pcValue), puLen);
            if (puLen > 0) then
            try
         
              pszLng := FormatW('%.4x%.4x', [pcValue[0], pcValue[1]]);
         
              sfi.pszCompanyName      := GetFileInfoProcW(AQueryValue[1]);
              sfi.pszFileDescription  := GetFileInfoProcW(AQueryValue[2]);
              sfi.pszFileVersion      := GetFileInfoProcW(AQueryValue[3]);
              sfi.pszInternalName     := GetFileInfoProcW(AQueryValue[4]);
              sfi.pszLegalCopyright   := GetFileInfoProcW(AQueryValue[5]);
              sfi.pszLegalTrademarks  := GetFileInfoProcW(AQueryValue[6]);
              sfi.pszOriginalFilename := GetFileInfoProcW(AQueryValue[7]);
              sfi.pszProductName      := GetFileInfoProcW(AQueryValue[8]);
              sfi.pszProductVersion   := GetFileInfoProcW(AQueryValue[9]);
              sfi.pszComments         := GetFileInfoProcW(AQueryValue[10]);
              sfi.pszPrivateBuild     := GetFileInfoProcW(AQueryValue[11]);
              sfi.pszSpecialBuild     := GetFileInfoProcW(AQueryValue[12]);
              sfi.pszLanguageName     := GetFileInfoProcW(AQueryValue[13]);
              sfi.pszLanguageID       := GetFileInfoProcW(AQueryValue[14]);
         
            finally
            end;
          finally
            HeapFree(GetProcessHeap, 0, pcBuf);
          end;
        end;


      Пример использования:

      ExpandedWrap disabled
        ///
        var
          ExeInfo: TStringFileInfoW;
        ///
          ZeroMemory(@ExeInfo, SizeOf(TStringFileInfoW));
          GetFileInfoW(AnsiStringToWide(ParamStr(0), CP_ACP), ExeInfo);
        ///
          MessageBoxW(0, MAKEINTRESOURCEW(ExeInfo.pszProductName), nil, MB_OK);
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0219 ]   [ 17 queries used ]   [ Generated: 28.03.24, 22:25 GMT ]