[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]