Это не в точности то, что вы ищите, но надеюсь, что это поможет. Я показываю
информацию о версии в диалоговом окне "О программе", код приведен ниже. Блок
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; |
|