Version Info Component
From: "Rick Peterson" <rickpet@airmail.net>
unit rpVersionInfo; //version 1.0 3/8/98 written and tested with Delphi 3. (*Written by Rick Peterson, this component is released to the public domain for any type of use, private or commercial. Should you enhance the product please give me credit and send me a copy. Also please report any bugs to me. Send all coorespondence to rickpet@airmail.net. *) interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, TypInfo; type {$M+} (* Have you seen the $M+ before???This tells delphi to publish RTTI info for enumerated types. Basically allowing your enumerated types to act as strings with GetEnumName *) TVersionType=(vtCompanyName, vtFileDescription, vtFileVersion, vtInternalName, vtLegalCopyright,vtLegalTradeMark, vtOriginalFileName, vtProductName, vtProductVersion, vtComments); {$M-} TrpVersionInfo = class(TComponent) (* This component will allow you to get Version Info from your program at RunTime *) private FVersionInfo : Array [0 .. ord(high(TVersionType))] of string; protected function GetCompanyName: string; function GetFileDescription: string; function GetFileVersion: string; function GetInternalName: string; function GetLegalCopyright: string; function GetLegalTradeMark: string; function GetOriginalFileName: string; function GetProductName: string; function GetProductVersion: string; function GetComments: string; function GetVersionInfo(VersionType: TVersionType): string; virtual; procedure SetVersionInfo; virtual; public constructor Create(AOwner: TComponent); override; published (* Label1.Caption := VersionInfo1.FileVersion; Simple as that. NOTE: ALL the properties are READONLY so you can not view them with the Object Inspector *) property CompanyName: string read GetCompanyName; property FileDescription: string read GetFileDescription; property FileVersion: string read GetFileVersion; property InternalName: string read GetInternalName; property LegalCopyright: string read GetLegalCopyright; property LegalTradeMark: string read GetLegalTradeMark; property OriginalFileName: string read GetOriginalFileName; property ProductName: string read GetProductName; property ProductVersion: string read GetProductVersion; property Comments: string read GetComments; end; procedure Register; implementation constructor TrpVersionInfo.Create(AOwner: TComponent); begin inherited Create(AOwner); SetVersionInfo; end; function TrpVersionInfo.GetCompanyName: string; begin result := GeTVersionInfo(vtCompanyName); end; function TrpVersionInfo.GetFileDescription: string; begin result := GeTVersionInfo(vtFileDescription); end; function TrpVersionInfo.GetFileVersion: string; begin result := GeTVersionInfo(vtFileVersion); end; function TrpVersionInfo.GetInternalName: string; begin result := GeTVersionInfo(vtInternalName); end; function TrpVersionInfo.GetLegalCopyright: string; begin result := GeTVersionInfo(vtLegalCopyright); end; function TrpVersionInfo.GetLegalTradeMark: string; begin result := GeTVersionInfo(vtLegalTradeMark); end; function TrpVersionInfo.GetOriginalFileName: string; begin result := GeTVersionInfo(vtOriginalFileName); end; function TrpVersionInfo.GetProductName: string; begin result := GeTVersionInfo(vtProductName); end; function TrpVersionInfo.GetProductVersion: string; begin result := GeTVersionInfo(vtProductVersion); end; function TrpVersionInfo.GetComments: string; begin result := GeTVersionInfo(vtComments); end; function TrpVersionInfo.GeTVersionInfo(VersionType: TVersionType): string; begin result := FVersionInfo[ord(VersionType)]; end; procedure TrpVersionInfo.SeTVersionInfo; var sAppName,sVersionType : string; iAppSize, iLenOfValue, i: integer; pcBuf,pcValue: PChar; begin sAppName := Application.ExeName; iAppSize:= GetFileVersionInfoSize(PChar(sAppName),iAppSize); if iAppSize > 0 then begin pcBuf := AllocMem(iAppSize); GetFileVersionInfo(PChar(sAppName),0,iAppSize,pcBuf); for i := 0 to Ord(High(TVersionType)) do begin sVersionType := GetEnumName(TypeInfo(TVersionType),i); sVersionType := Copy(sVersionType,3,length(sVersionType)); if VerQueryValue(pcBuf,PChar('StringFileInfo\040904E4\'+ sVersionType), Pointer(pcValue),iLenOfValue) then FVersionInfo[i] := pcValue; end; FreeMem(pcBuf,iAppSize); end; end; procedure Register; begin RegisterComponents('FreeWare', [TrpVersionInfo]); end; end.