Mega Code Archive

 
Categories / Delphi / Examples
 

Application version number

How to get the version number of an application at runtime unit GetVersionInfo; interface uses Windows, Classes, SysUtils; procedure GetProjectVersionInfo(AVersionList: TStrings; AFileName: string = ''); function GetBuildInfo(var V1, V2, V3, V4: Word; AFileName: string = ''): Boolean; function GetBuildInfoAsString(AFileName: string = ''): string; implementation type PTransBuffer = ^TTransBuffer; TTransBuffer = array[1..13] of smallint; const CInfoStr : array[1..13] of string = ('FileVersion', 'CompanyName', 'FileDescription', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments', 'CurrentProgramVersion', 'CurrentDatabaseVersion', 'VersionDetails'); procedure GetProjectVersionInfo(AVersionList: TStrings; AFileName: string = ''); { This procedure returns ALL of the version information as separate string entries of a TString list. Each element can then be accessed by indexing the TString list thus: AVersionList[0], AVersionList[1] etc.. } var I: Integer; InfoSize: DWORD; pTrans: PTransBuffer; TransStr: string; TypeStr: string; Value: PChar; VerBuf: pointer; VerSize: DWORD; Wnd: DWORD; begin AVersionList.Clear; if AFileName = '' then AFileName := ParamStr(0); InfoSize := GetFileVersioninfoSize(PChar(AFileName), Wnd); if (InfoSize <> 0) then begin GetMem(VerBuf, InfoSize); try if GetFileVersionInfo(PChar(AFileName), Wnd, InfoSize, VerBuf) then begin VerQueryValue(VerBuf, PChar('\VarFileInfo\Translation'), Pointer(pTrans), VerSize); TransStr := IntToHex(pTrans^[1], 4) + IntToHex(pTrans^[2], 4); for i := Low(CInfoStr) to High(CInfoStr) do begin TypeStr := 'StringFileInfo\' + TransStr + '\' + CInfoStr[I]; if VerQueryvalue(VerBuf, PChar(TypeStr), Pointer(Value), VerSize) then AVersionList.Add(CInfoStr[I] + '=' + Value); end end; finally FreeMem(VerBuf); end; end; end; function GetBuildInfo(var V1, V2, V3, V4: Word; AFileName: string = ''): Boolean; { This procedure returns the individual Major/Minor/Release/Build values of the version information. } var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; VerValue: PVSFixedFileInfo; Dummy: DWORD; begin Result := True; if AFileName = '' then AFileName := ParamStr(0); VerInfoSize := GetFileVersionInfoSize(PChar(AFileName), Dummy); if VerInfoSize = 0 then begin Result := False; Exit; end; GetMem(VerInfo, VerInfoSize); try GetFileVersionInfo(PChar(AFileName), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin V1 := dwFileVersionMS shr 16; V2 := dwFileVersionMS and $FFFF; V3 := dwFileVersionLS shr 16; V4 := dwFileVersionLS and $FFFF; end; finally FreeMem(VerInfo, VerInfoSize); end; end; function GetBuildInfoAsString(AFileName: string = ''): string; var V1: Word; V2: Word; V3: Word; V4: Word; begin if GetBuildInfo(V1, V2, V3, V4) then Result := Format('%d.%d.%d.%d', [V1, V2, V3, V4]) else Result := ''; end; end.