Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по ф-ции GetFileVersionInfo. Visual C++ и MFC. 
:(
    Опции темы
AndreySol
Дата 21.8.2004, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Вопрос по ф-ции GetFileVersionInfo.
Помогите начинающему в Visual C++ и MFC.
Пробую делать так:
Код

unsigned long sizeInf;
sizeInf = GetFileVersionInfoSize("c:\\windows\\calc.exe", NULL);
GetFileVersionInfo("c:\\windows\\calc.exe", NULL, sizeInf, LPVOID Data);

Но не знаю как быть с LPVOID Data. Помогите разобраться.
Заранее Всем благодарен за ответы и подсказки.
PM MAIL   Вверх
_hunter
Дата 21.8.2004, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



как написанно в MSDN: в LPVOID Data будет толкаться информация ( размер буффера можно получить с помощью GetFileVersionInfoSize )
соответственно выделим массив:
unsigned char * data = new unsigned char[sizeInf];
потом этот буффер передадим в GetFileVersionInfo:
GetFileVersionInfo("c:\\windows\\calc.exe", NULL, sizeInf, (LPVOID)data);
и все


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
AndreySol
Дата 23.8.2004, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Понял. А что делать далее с этим буфером (т.е. какие ф-ции для его обработки)?
PM MAIL   Вверх
Allest
Дата 23.8.2004, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 17.9.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Код

LPTSTR pszBuf;
DWORD dwSize, dwHandle, *pLangList;
VS_FIXEDFILEINFO* pFixInfo;
UINT uiSize, uiLangsCount, uiIter, uiLen;
LPTSTR pszValue;
TCHAR szValuePath[100];
TCHAR szResFileName[_MAX_PATH];

// имя файла с ресурсом версии
::GetModuleFileName(NULL, szResFileName, _MAX_PATH);
// определение размера ресурса
dwSize = ::GetFileVersionInfoSize(szResFileName, &dwHandle);
if (!dwSize)
return FALSE;
// выделение памяти под ресурс
pszBuf = (LPTSTR)GlobalAlloc(GMEM_FIXED, dwSize);
if (!pszBuf)
return FALSE;
// загрузка ресурса в память
::GetFileVersionInfo(szResFileName, dwHandle, dwSize, pszBuf);
// получение фиксированной информации
::VerQueryValue(pszBuf, TEXT("\\"), (VOID**)&pFixInfo, &uiSize);
// Read the list of languages and code pages.
if (VerQueryValue(pszBuf, TEXT("\\VarFileInfo\\Translation"), (VOID**)&pLangList, &uiLangsCount))
{
for (uiIter = 0; uiIter < (uiLangsCount / sizeof(DWORD)); uiIter++ )
{
// чтение поля "ProductName" и вывод его на экран
sprintf(szValuePath, "%s%04x%04x%sProductName", "\\StringFileInfo\\", LOWORD(pLangList[uiIter]), HIWORD(pLangList[uiIter]), "\\");
::VerQueryValue(pszBuf, szValuePath, (VOID**)&pszValue, &uiLen);
::MessageBox(NULL, pszValue, "ProductName", MB_OK);

// другие стандартные поля
// Comments, CompanyName, FileDescription, FileVersion, InternalName, LegalCopyright, LegalTrademarks, OriginalFilename, PrivateBuild, ProductName, ProductVersion, SpecialBuild
//
}
}
GlobalFree(pszBuf);

Вот как-то так.
PM ICQ   Вверх
AndreySol
Дата 29.8.2004, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Вот спасибо, давно бился над этим !
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.