скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook