Советы по Delphi

         

Функции 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


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]



Содержание раздела