[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]
{
  This sample program demonstrates how to use the
  GetFileVersionInfo,  GetFileVersionInfoSize, and
  VerQueryValue API functions to obtain  version
  information from a Windows EXE or DLL containing
  a version  information resource.
}
program GetVer;
uses WinCRT, WinTypes, WinProcs, Ver;
const
  FileName: PChar = 'c:\windows\system\mmsystem.dll';
type
  PLongInt = ^Longint;
var
  VSize, VHandle: Longint;
  Buffer: PChar;
  Length, LangID, CharSetID: Word;
  TranslationInfo, Result: Pointer;
  StringFileInfo: Array[0..49] of Char;
  LangCharSetIDArray: Array[1..2] of Word;
begin
  { Get size of version info }
  VSize := GetFileVersionInfoSize(FileName, VHandle);
  { Allocate version info buffer }
  GetMem(Buffer, VSize + 1);
  { Get version info }
  if GetFileVersionInfo(FileName, VHandle, VSize, Buffer) then
    { Get translation info for Language / CharSet IDs }
    if VerQueryValue(Buffer, '\VarFileInfo\Translation',
                                       TranslationInfo, Length) then begin
      LangCharSetIDArray[1] := LoWord(PLongint(TranslationInfo)^);
      LangCharSetIDArray[2] := HiWord(PLongint(TranslationInfo)^);
      { Get comments - this field is often blank }
      wvsPrintf(StringFileInfo, '\StringFileInfo\%04x%04x\Comments',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Comments: ', PChar(Result));
      { Get company name }
      wvsPrintf(StringFileInfo,
                           '\StringFileInfo\%04x%04x\CompanyName',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Company: ', PChar(Result));
      { Get file description }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\FileDescription',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('File description: ', PChar(Result));
      { Get file version }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\FileVersion',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('File version: ', PChar(Result));
      { Get internal name}
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\InternalName',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Internal name: ', PChar(Result));
      { Get legal copyright info }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\LegalCopyright',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Copyright: ', PChar(Result));
      { Get trademarks }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\LegalTrademarks',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Trademarks: ', PChar(Result));
      { Get original filename }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\OriginalFilename',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Original filename: ', PChar(Result));
      { Get private build info }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\PrivateBuild',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Private build info: ', PChar(Result));
      { Get product name }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\ProductName',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Product name: ', PChar(Result));
      { Get product version }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\ProductVersion',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Product version: ', PChar(Result));
      { Get special build info }
      wvsPrintf(StringFileInfo,
                          '\StringFileInfo\%04x%04x\SpecialBuild',
                          LangCharSetIDArray);
      VerQueryValue(Buffer, StringFileInfo, Result, Length);
      Writeln('Special build info: ', PChar(Result));
    end;
  FreeMem(Buffer, VSize + 1);
end.
[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]