Это не в точности то, что вы ищите, но надеюсь, что это поможет. Я показываю
информацию о версии в диалоговом окне "О программе", код приведен ниже. Блок
StringFileInfo вы можете и не использовать, он необходим для осуществления
простейшей проверки, вместо этого можно получить информацию из корневого блока
(для дополнительной информации смотри структуру TVS_FIXEDFILEINFO в файле помощи
по API).
procedure TAboutBox.FormCreate(Sender: TObject);
var
VIHandle: LongInt;
VSize: LongInt;
VData: Pointer;
VVers: Pointer;
Len: Word;
FileName: string;
const{ Предустановленный набор символов U.S., если я правильно помню }
Prefix = '\StringFileInfo\040904E4\';
function GetVerValue(Value: string): string;
var
ItemName: string;
begin
ItemName := Prefix + Value + chr(0);
Result := '';
if VerQueryValue(VData, @ItemName[1], VVers, Len) thenif Len > 0 thenbeginif Len > 255 then
Len := 255; { "Обрезаем" любые длинные строки }
Move(VVers^, Result[1], Len);
Result[0] := Chr(Len);
end;
end;
begin
FileName := Application.EXEName + chr(0);
VSize := GetFileVersionInfoSize(@FileName[1], VIHandle);
if VIHandle <> 0 thenbegin
GetMem(VData, VSize);
tryif GetFileVersionInfo(@FileName[1], VIHandle, VSize, VData) thenbegin{ В этом месте мы получаем значения из блока StringFileInfo,
но точно также мы могли бы взять значения из корневого блока,
используя VerQueryValue }
ProductName.Caption := GetVerValue('ProductName');
Version.Caption := GetVerValue('ProductVersion');
Copyright.Caption := GetVerValue('LegalCopyright');
Comments.Caption := GetVerValue('FileDescription');
end;
finally
FreeMem(VData, VSize);
end;
end;
end;
Статья Функции VER.DLL раздела Файловая система DLL и PlugIns может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.