Программа, приведенная ниже считывает информацию о версии выбранной программы и выводит в Memo:
procedure TForm1.BitBtn1Click(Sender: TObject);
const
//Количество ключей
InfoNum = 10;
//Список имен интересующих нас ключей
InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
S: string;
n, Len, i: DWORD;
Buf: PChar;
Value: PChar;
begin
if OpenDialog1.Execute then
begin
//Имя фала
S:=OpenDialog1.FileName;
//Размер занимаемый иформацией о версии
n := GetFileVersionInfoSize(PChar(S), n);
if n > 0 then
begin
//Выделяю место под информацию в памяти
Buf := AllocMem(n);
//Печатаю:
//имя файла
Memo1.Lines.Add(S);
//размер, занимаемый информацией
Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n));
//Копирую информацию о версии в буфер
GetFileVersionInfo(PChar(S), 0, n, Buf);
for i := 1 to InfoNum do
//Читаю значение ключа
//* Примечание: 04190E3 - это шестнадцатеричный код кодовой страницы для русского языка
//* если шестнадцатеричный код будет указан неправильно, то значения ключей найдены не будут
if VerQueryValue(Buf, PChar('StringFileInfo\041904E3\' + InfoStr[i]), Pointer(Value), Len) then
//Печатаю значения ключа
Memo1.Lines.Add(InfoStr[i] + ' = ' + Value);
//Освобождаю память буфера
FreeMem(Buf, n);
end
else
Memo1.Lines.Add('Информации по версии не найдено');
end;
end;
Подробнее по структуре информации о версии файла, опции, ключи и их интерпретация см. Информация о версии файла.
Список литературы: