15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как извлечь версию EXE,DLL и т.д.?

void GetVersionOfFile (char * pszAppName, // file
                       char * pszVerBuff, // receives version
                       int     iVerBuffLen, // size of buffer
                       char * pszLangBuff, // receives language
                       int iLangBuffLen) // size of buffer
{
   DWORD dwScratch;
   DWORD * pdwLangChar;
   DWORD dwInfSize ;
   UINT uSize;
   BYTE * pbyInfBuff;
   char szVersion [32];
   char szResource [80];
   char * pszVersion = szVersion;

   dwInfSize = GetFileVersionInfoSize (pszAppName, &dwScratch);

   if (dwInfSize)
   {
      pbyInfBuff = new BYTE [dwInfSize];
      memset (pbyInfBuff, 0, dwInfSize);
      if (pbyInfBuff)
      {
         if (GetFileVersionInfo (pszAppName, 0, dwInfSize, pbyInfBuff))
         {
            if (VerQueryValue (pbyInfBuff,
                               "\\VarFileInfo\\Translation",
                               (void**)(&pdwLangChar),
                               &uSize))
            {
               if (VerLanguageName (LOWORD (*pdwLangChar),
                                    szResource,
                                    sizeof(szResource)))
               {
                  strncpy (pszLangBuff, szResource, iLangBuffLen);
               }
               wsprintf (szResource, "\\StringFileInfo\\%04X%04X\\FileVersion",
                         LOWORD (*pdwLangChar), HIWORD (*pdwLangChar));

               if (VerQueryValue (pbyInfBuff,
                                  szResource,
                                  (void**)(&pszVersion),
                                  &uSize))
               {
                  strncpy (pszVerBuff, pszVersion, iVerBuffLen-1);
               }
            }
         }
         delete [] pbyInfBuff;
      }
   }
}