Программа, приведенная ниже считывает информацию о версии выбранной программы и выводит в 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;
Подробнее по структуре информации о версии файла, опции, ключи и их интерпретация см. Информация о версии файла.
Список литературы: