Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Получение информации о 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 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
5-1130553865
jk
2005-10-29 06:44
2006.04.30
связь компонентов в DisignTime


6-1137397801
Pazitron_Brain
2006-01-16 10:50
2006.04.30
Как организовать чат с использованием TClientSocket и TServerSock


2-1145019564
KygECHuK
2006-04-14 16:59
2006.04.30
как отменить Drag & Drop


15-1144299862
Ega23
2006-04-06 09:04
2006.04.30
Тьфу, блин!!! С Днём рождения! 6 апреля


15-1144504847
kcg
2006-04-08 18:00
2006.04.30
"Сканер транслятора"