Это не в точности то, что вы ищите, но надеюсь, что это поможет. Я показываю
информацию о версии в диалоговом окне "О программе", код приведен ниже. Блок
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) thenif Len > 0 thenbeginif 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 thenbegin
GetMem(VData, VSize);
tryif GetFileVersionInfo(@FileName[1], VIHandle, VSize, VData) thenbegin{ В этом месте мы получаем значения из блока 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;
Программный код на Delphi, который извлекает информацию о версии из файла VER.DLL и отображает ее в диалоговом окне "О программе". Код использует функции GetFileVersionInfoSize и GetFileVersionInfo для извлечения размера буфера информации о версии и копирования данных в указатель.
Функция GetVerValue используется для извлечения конкретных значений из буфера информации о версии, таких как имя продукта, номер версии, информация о авторских правах и описание файла. Извлеченные значения затем присваиваются меткам на диалоговом окне.
Разбивка кода:
Обработчик события FormCreate для диалогового окна "О программе" - это место, где код извлекает информацию о версии.
Переменная FileName содержит имя исполняемого файла, включая расширение.
Переменная VSize хранит размер буфера информации о версии, полученный с помощью функции GetFileVersionInfoSize.
Если переменная VIHandle не равна 0, то это означает, что буфер информации о версии существует, и код выделяет память для него с помощью GetMem.
Функция GetFileVersionInfo копирует данные из файла в выделенную память.
Функция GetVerValue извлекает конкретные значения из буфера информации о версии с помощью функции VerQueryValue.
Функция GetVerValue принимает строковое значение как входной параметр (например, 'ProductName') и возвращает соответствующее значение из буфера информации о версии. Если значение длиннее 255 символов, оно обрезается до 255 символов.
Извлеченные значения затем присваиваются меткам на диалоговом окне с помощью свойства Caption:
ProductName.Caption
Version.Caption
Copyright.Caption
Comments.Caption
В целом, этот код обеспечивает удобный способ извлечения информации о версии из исполняемого файла и отображения ее в диалоговом окне "О программе".
В статье описывается функция VER.DLL, которая позволяет получать информацию о версии программы в диалоговом окне 'О программе' и использовать ее для отображения наименования продукта, его версии, авторских прав и описания файла.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS