Это не в точности то, что вы ищите, но надеюсь, что это поможет. Я показываю информацию о версии в диалоговом окне "О программе", код приведен ниже. Блок StringFileInfo вы можете и не использовать, он необходим для осуществления простейшей проверки, вместо этого можно получить информацию из корневого блока (для дополнительной информации смотри структуру TVS_FIXEDFILEINFO в файле помощи по API).
procedure TAboutBox.FormCreate(Sender: TObject); var VIHandle : LongInt; VSize : LongInt; VData : Pointer; VVers : Pointer; Len : Word; FileName : String; const Prefix = '\StringFileInfo\040904E4\'; { Предустановленный набор символов U.S., если я правильно помню } 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; |
[001658]