Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск № 34-2003 BCBDEV.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"
Переводы многих функций Win32API, которые часто используются в данной рассылке, вы можете получать, подписавшись на дружественную рассылку "WinAPI на русском".
Справочник по функциям Win32API вы можете посмотреть на сайте BcbDev.ru в разделе MSDN по-русски.

Как определить версию файла
Для этого можно использовать следующую функцию:(автор неизвестен)
void GetVersionOfFile (char * pszAppName,   // Имя файла
                       char * pszVerBuff,   // Буфер для версии
                       int     iVerBuffLen, // Размер буфера
                       char * pszLangBuff,  // Буфер для языка
                       int iLangBuffLen)    // Размер буфера
{
    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;
        }
    }
}
А использовать можно так:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    char *szAppName = "C:\\winnt\\system32\\notepad.exe";
    char  szVerBuff[255];
    char  szLangBuff[255];
    GetVersionOfFile (szAppName,
        szVerBuff, sizeof(szVerBuff),
        szLangBuff, sizeof(szLangBuff));
    MessageBox(NULL,szVerBuff,szLangBuff,MB_OK);
    return 0;
}
 

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное