Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Получение информации о EXE   Найти похожие ветки 

 
Nike   (2006-02-06 06:59) [0]

Здравствуйте! Меня интересует следующий вопрос - как можно получить информацию о версии файла с помощью функции GetFileVersionInfo? Конкретно мне необходимо получить FileDescription на первом из языков, описания на которых хранятся в файле. Если я вызываю
VerQueryValue(pcBuf, PChar("StringFileInfo\040904E4\FileDescription")
то если описание в файле хранится, к примеру, на русском языке, функция ничего не возращает. Как тогда мне получить описание на имеющемся языке? Или хотя бы узнать язык и раскладку, на которых в файле хранятся данные.


 
kaZaNoVa ©   (2006-02-06 07:07) [1]

может это?

// Получение версии программы/библиотеки вида XX.XX

Function GetFileVersion(Const FileName: String): String;
Type
 TFileVersion = Packed Record
   Case Integer Of
     0: (Ver64: Int64);
     1: (VerLS, VerMS: DWORD);
     2: (Ver3, Ver2, Ver1, Ver0: Word);
     3: (Build, Release, Minor, Major: Word);
 End;
Var
 VersInfo          : Pointer;
 VersInfoSize      : DWORD;
 FileVersion       : TFileVersion;
 w                 : DWORD;
 FileInfo          : PVSFixedFileInfo;
Begin
 Result := "";
 VersInfoSize := GetFileVersionInfoSize(PChar(FileName), W);
 GetMem(VersInfo, VersInfoSize);
 Try
   If GetFileVersionInfo(PChar(FileName), 0, VersInfoSize, VersInfo) And
     VerQueryValue(VersInfo, "\", Pointer(FileInfo), W) Then
     Begin
       FileVersion.VerMS := FileInfo.dwFileVersionMS;
       FileVersion.VerLS := FileInfo.dwFileVersionLS;
       Result := Int2Str(FileVersion.Major) + "." + Int2Str(FileVersion.Minor);
     End;
 Finally
   FreeMem(VersInfo);
 End;
End;


 
kaZaNoVa ©   (2006-02-06 07:09) [2]

еще ..
function FileVersion(fname: string): string;
var
 siz       : Integer;
 buf, value: pChar;
 hndl      : DWORD;
begin
 Result := "?.?.?.?";
 siz := GetFileVersionInfoSize(PChar(fname), hndl);
 if siz > 0 then
 begin
   buf := AllocMem(siz);
   try
     GetFileVersionInfo(PChar(fname), 0, siz, buf);
     if VerQueryValue(buf, pChar("StringFileInfo\040904E4\FileVersion")
       , pointer(value), hndl) then
       Result := value
     else
       if VerQueryValue(buf, pChar("StringFileInfo\040904B0\FileVersion")
         , pointer(value), hndl) then
         Result := value;
   finally
     FreeMem(buf);
   end;
 end;
end;


 
Nike   (2006-02-07 11:17) [3]

to kaZaNoVa:
Насчет первого примера - мне надо получить FileDescription, а в записи типа PVSFixedFileInfo такая информация не хранится.
Насчет второго - указание строки "StringFileInfo\040904E4\FileVersion" означает, что из файла будет браться информация только на языке и чарсете, определяемом комбинацией 0x040904E4. Проблема в том, что эта информация может хранится и на другом языке. Мне необходимо узнать, на каком языке хранятся эти данные.
Можно, конечно, перебрать наиболее "популярные" кодировки, но это выглядит чересчур горбато.


 
begin...end ©   (2006-02-07 12:13) [4]

> Nike   (07.02.06 11:17) [3]

> мне надо получить FileDescription, а в записи типа PVSFixedFileInfo
> такая информация не хранится

Хранится: "\FileDescription".

> Мне необходимо узнать, на каком языке хранятся эти данные.

Вызывайте VerQueryValue с параметром "\VarFileInfo\Translation".

> Можно, конечно, перебрать наиболее "популярные" кодировки,
> но это выглядит чересчур горбато.

Пример в MSDN (внизу страницы -- ShowExample):

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Resources/VersionInfor mation/VersionInformationReference/VersionInformationFunctions/VerQueryValue.asp

(если ссылка разорвётся, соедините).


 
Nike   (2006-02-08 07:41) [5]

To begin...end:
Спасибо, этот пример, похоже, как раз то что мне и нужно. Кстати, почему в хелпе к Delphi (у меня 7-я) такого примера нету? Может нужна обновленная версия хелпа (MS SDK)???? Или Майкрософт дает Борланду лишь "урезанную версию" хелпа?


 
begin...end ©   (2006-02-08 13:25) [6]

> Nike   (08.02.06 07:41) [5]
> Или Майкрософт дает Борланду лишь "урезанную версию" хелпа?

Конечно. Поэтому лучше пользоваться сайтом www.msdn.com или приобрести свежую offline-версию MSDN.


 
Nike   (2006-02-10 12:58) [7]

To begin...end:
И где можно найти "свежую offline-версию MSDN" за приемлемую цену? Учитывая то, что нахожусь я на периферии (поблизости ниодного майкрософтовского офиса). Конечно, желательно бы бесплатно и посвежее..



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
1-1143018225
Andrey.Ru
2006-03-22 12:03
2006.04.30
Продолжительность m2v файла??????


2-1144922308
Сергей И
2006-04-13 13:58
2006.04.30
Кто занет как изменить рисунок при запуске WINdows?


15-1144412299
xayam
2006-04-07 16:18
2006.04.30
Посоветуйте редактор


2-1144999965
elfebet
2006-04-14 11:32
2006.04.30
Прочитать файл из интернета


2-1144731535
Neiroman
2006-04-11 08:58
2006.04.30
Random()





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский