{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
unit uCICVersionInformation;

interface

uses
  Classes, SysUtils, {$IFDEF MSWINDOWS}Windows{$ENDIF};

function CICGetAppVersionStr(pFileName: String): String;

implementation

function CICGetAppVersionStr(pFileName: String): String;
{$IFDEF MSWINDOWS}
var
  lSize: Cardinal;
  lHandle: DWORD;
  lBuffer: TBytes;
  lVerInfo: PVSFixedFileInfo;
begin
  result := '';
  lSize := GetFileVersionInfoSize(PChar(pFileName), lHandle);
  if (lSize = 0) then
  begin
    RaiseLastOSError;
    exit;
  end;
  SetLength(lBuffer, lSize);
  if not GetFileVersionInfo(PChar(pFileName), lHandle, lSize, lBuffer) then
  begin
    RaiseLastOSError;
    exit;
  end;
  if not VerQueryValue(lBuffer, '\', Pointer(lVerInfo), lSize) then
  begin
    RaiseLastOSError;
    exit;
  end;
  result := Format('%d.%d.%d.%d',
   [LongRec(lVerInfo.dwFileVersionMS).Hi, // major
    LongRec(lVerInfo.dwFileVersionMS).Lo, // minor
    LongRec(lVerInfo.dwFileVersionLS).Hi, // release
    LongRec(lVerInfo.dwFileVersionLS).Lo]); // build
{$ELSE}
begin
  result := '';
{$ENDIF}
end;
end.
