Функции VER.DLL
Это не в точности то, что вы ищите, но надеюсь, что это поможет. Я показываю
информацию о версии в диалоговом окне "О программе", код приведен ниже. Блок
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) then
if Len > 0 then
begin
if 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 then
begin
GetMem(VData, VSize);
try
if GetFileVersionInfo(@FileName[1], VIHandle, VSize, VData) then
begin
{ В этом месте мы получаем значения из блока 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;
|
|