![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение информации о EXE [D7, Win95/98, WinXP]
Nike © (2006-02-06 06:59:00)Здравствуйте! Меня интересует следующий вопрос - как можно получить информацию о версии файла с помощью функции GetFileVersionInfo? Конкретно мне необходимо получить FileDescription на первом из языков, описания на которых хранятся в файле. Если я вызываю
VerQueryValue(pcBuf, PChar('StringFileInfo\040904E4\FileDescription')
то если описание в файле хранится, к примеру, на русском языке, функция ничего не возращает. Как тогда мне получить описание на имеющемся языке? Или хотя бы узнать язык и раскладку, на которых в файле хранятся данные.
Nike (2006-02-10 12:58:00) [1]To begin...end:
И где можно найти "свежую offline-версию MSDN" за приемлемую цену? Учитывая то, что нахожусь я на периферии (поблизости ниодного майкрософтовского офиса). Конечно, желательно бы бесплатно и посвежее..
begin...end (2006-02-08 13:25:00) [2]> Nike (08.02.06 07:41) [5]
> Или Майкрософт дает Борланду лишь "урезанную версию" хелпа?
Конечно. Поэтому лучше пользоваться сайтом www.msdn.com или приобрести свежую offline-версию MSDN.
Nike (2006-02-08 07:41:00) [3]To begin...end:
Спасибо, этот пример, похоже, как раз то что мне и нужно. Кстати, почему в хелпе к Delphi (у меня 7-я) такого примера нету? Может нужна обновленная версия хелпа (MS SDK)???? Или Майкрософт дает Борланду лишь "урезанную версию" хелпа?
begin...end (2006-02-07 12:13:00) [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/VersionInformation/VersionInformationReference/VersionInformationFunctions/VerQueryValue.asp
(если ссылка разорвётся, соедините).
Nike (2006-02-07 11:17:00) [5]to kaZaNoVa:
Насчет первого примера - мне надо получить FileDescription, а в записи типа PVSFixedFileInfo такая информация не хранится.
Насчет второго - указание строки 'StringFileInfo\040904E4\FileVersion' означает, что из файла будет браться информация только на языке и чарсете, определяемом комбинацией 0x040904E4. Проблема в том, что эта информация может хранится и на другом языке. Мне необходимо узнать, на каком языке хранятся эти данные.
Можно, конечно, перебрать наиболее "популярные" кодировки, но это выглядит чересчур горбато.
kaZaNoVa (2006-02-06 07:09:00) [6]еще ..
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;
kaZaNoVa (2006-02-06 07:07:00) [7]может это?
// Получение версии программы/библиотеки вида 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;