317 lines
8.5 KiB
ObjectPascal
317 lines
8.5 KiB
ObjectPascal
{ RxVersInfo is part of RxFPC library
|
|
|
|
Copyright (C) 2005-2017 Lagunov Aleksey alexs75@yandex.ru and Lazarus team
|
|
original conception from rx library for Delphi (c)
|
|
|
|
This library is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Library General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or (at your
|
|
option) any later version with the following modification:
|
|
|
|
As a special exception, the copyright holders of this library give you
|
|
permission to link this library with independent modules to produce an
|
|
executable, regardless of the license terms of these independent modules,and
|
|
to copy and distribute the resulting executable under terms of your choice,
|
|
provided that you also meet, for each linked independent module, the terms
|
|
and conditions of the license of that module. An independent module is a
|
|
module which is not derived from or based on this library. If you modify
|
|
this library, you may extend this exception to your version of the library,
|
|
but you are not obligated to do so. If you do not wish to do so, delete this
|
|
exception statement from your version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; if not, write to the Free Software Foundation,
|
|
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
}
|
|
|
|
unit RxVersInfo;
|
|
|
|
{$mode objfpc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, versionresource, lclversion;
|
|
|
|
type
|
|
TLongVersion = string;
|
|
TVersionCharSet = string;
|
|
TVersionLanguage = string;
|
|
|
|
{ TRxVersionInfo }
|
|
|
|
TRxVersionInfo = class(TComponent)
|
|
private
|
|
FValid: Boolean;
|
|
FValues:TStringList;
|
|
FFileName: string;
|
|
function GetComments: string;
|
|
function GetCompanyName: string;
|
|
function GetFileDescription: string;
|
|
function GetFileLongVersion: TLongVersion;
|
|
function GetFileName: string;
|
|
function GetFileVersion: string;
|
|
//function GetFixedFileInfo: PVSFixedFileInfo;
|
|
function GetInternalName: string;
|
|
function GetLegalCopyright: string;
|
|
function GetLegalTrademarks: string;
|
|
function GetOriginalFilename: string;
|
|
function GetPrivateBuild: string;
|
|
function GetProductLongVersion: TLongVersion;
|
|
function GetProductName: string;
|
|
function GetProductVersion: string;
|
|
function GetSpecialBuild: string;
|
|
function GetTranslation: Pointer;
|
|
function GetVerFileDate: TDateTime;
|
|
function GetVersionCharSet: TVersionCharSet;
|
|
function GetVersionLanguage: TVersionLanguage;
|
|
function GetVersionNum: Longint;
|
|
function GetVerValue(const VerName: string): string;
|
|
function GetWidgetName: string;
|
|
procedure SetFileName(const AValue: string);
|
|
procedure DoVersionInfo(V:TVersionResource);
|
|
protected
|
|
{ Protected declarations }
|
|
public
|
|
constructor Create(AOwner: TComponent);override;
|
|
destructor Destroy; override;
|
|
procedure LoadFromFile(const AFileName:string);
|
|
|
|
property FileName: string read GetFileName write SetFileName;
|
|
property Valid: Boolean read FValid;
|
|
//property FixedFileInfo: PVSFixedFileInfo read GetFixedFileInfo;
|
|
property FileLongVersion: TLongVersion read GetFileLongVersion;
|
|
property ProductLongVersion: TLongVersion read GetProductLongVersion;
|
|
property Translation: Pointer read GetTranslation;
|
|
property VersionLanguage: TVersionLanguage read GetVersionLanguage;
|
|
property VersionCharSet: TVersionCharSet read GetVersionCharSet;
|
|
property VersionNum: Longint read GetVersionNum;
|
|
property Comments: string read GetComments;
|
|
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 LegalTrademarks: string read GetLegalTrademarks;
|
|
property OriginalFilename: string read GetOriginalFilename;
|
|
property ProductVersion: string read GetProductVersion;
|
|
property ProductName: string read GetProductName;
|
|
property SpecialBuild: string read GetSpecialBuild;
|
|
property PrivateBuild: string read GetPrivateBuild;
|
|
property Values[const VerName: string]: string read GetVerValue;
|
|
property VerFileDate: TDateTime read GetVerFileDate;
|
|
published
|
|
property WidgetName:string read GetWidgetName;
|
|
end;
|
|
|
|
|
|
implementation
|
|
uses FileUtil, resource, resreader, InterfaceBase, rxconst, LazFileUtils,
|
|
LazUTF8
|
|
{$IFDEF WINDOWS}
|
|
, winpeimagereader
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
, elfreader
|
|
{$ENDIF}
|
|
{$IF (lcl_major > 0) and (lcl_minor > 6)}, LCLPlatformDef {$ENDIF};
|
|
|
|
|
|
{ TRxVersionInfo }
|
|
|
|
function TRxVersionInfo.GetComments: string;
|
|
begin
|
|
Result:=FValues.Values['Comments'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetCompanyName: string;
|
|
begin
|
|
Result:=FValues.Values['CompanyName'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetFileDescription: string;
|
|
begin
|
|
Result:=FValues.Values['FileDescription'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetFileLongVersion: TLongVersion;
|
|
begin
|
|
Result:=FValues.Values['FileVersion'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetFileName: string;
|
|
begin
|
|
Result:=FValues.Values['OriginalFilename'];
|
|
if Result = '' then
|
|
Result:=FFileName;
|
|
end;
|
|
|
|
function TRxVersionInfo.GetFileVersion: string;
|
|
begin
|
|
Result:=FValues.Values['FileVersion'];
|
|
end;
|
|
|
|
{function TRxVersionInfo.GetFixedFileInfo: PVSFixedFileInfo;
|
|
begin
|
|
Result:='';
|
|
end;}
|
|
|
|
function TRxVersionInfo.GetInternalName: string;
|
|
begin
|
|
Result:=FValues.Values['InternalName'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetLegalCopyright: string;
|
|
begin
|
|
Result:=FValues.Values['LegalCopyright'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetLegalTrademarks: string;
|
|
begin
|
|
Result:=FValues.Values['LegalTrademarks'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetOriginalFilename: string;
|
|
begin
|
|
Result:=FValues.Values['LegalTrademarks'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetPrivateBuild: string;
|
|
begin
|
|
Result:='';
|
|
end;
|
|
|
|
function TRxVersionInfo.GetProductLongVersion: TLongVersion;
|
|
begin
|
|
Result:='';
|
|
end;
|
|
|
|
function TRxVersionInfo.GetProductName: string;
|
|
begin
|
|
Result:=FValues.Values['ProductName'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetProductVersion: string;
|
|
begin
|
|
Result:=FValues.Values['ProductVersion'];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetSpecialBuild: string;
|
|
begin
|
|
Result:='';
|
|
end;
|
|
|
|
function TRxVersionInfo.GetTranslation: Pointer;
|
|
begin
|
|
Result:=nil;
|
|
end;
|
|
|
|
function TRxVersionInfo.GetVerFileDate: TDateTime;
|
|
begin
|
|
Result:=0;
|
|
end;
|
|
|
|
function TRxVersionInfo.GetVersionCharSet: TVersionCharSet;
|
|
begin
|
|
Result:='';
|
|
end;
|
|
|
|
function TRxVersionInfo.GetVersionLanguage: TVersionLanguage;
|
|
begin
|
|
Result:='';
|
|
end;
|
|
|
|
function TRxVersionInfo.GetVersionNum: Longint;
|
|
begin
|
|
Result:=0;
|
|
end;
|
|
|
|
procedure TRxVersionInfo.SetFileName(const AValue: string);
|
|
begin
|
|
LoadFromFile(AValue);
|
|
end;
|
|
|
|
procedure TRxVersionInfo.DoVersionInfo(V: TVersionResource);
|
|
var
|
|
i,j:integer;
|
|
begin
|
|
for i:=0 to V.StringFileInfo.Count-1 do
|
|
begin
|
|
for j:=0 to V.StringFileInfo[i].Count-1 do
|
|
FValues.Values[V.StringFileInfo[i].Keys[j]]:=SysToUTF8(V.StringFileInfo[i].ValuesByIndex[j]);
|
|
end;
|
|
end;
|
|
|
|
constructor TRxVersionInfo.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FValues:=TStringList.Create;
|
|
LoadFromFile(ParamStr(0));
|
|
end;
|
|
|
|
destructor TRxVersionInfo.Destroy;
|
|
begin
|
|
FreeAndNil(FValues);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TRxVersionInfo.LoadFromFile(const AFileName: string);
|
|
var
|
|
Res:TResources;
|
|
i:integer;
|
|
Reader:TAbstractResourceReader;
|
|
V:TVersionResource;
|
|
begin
|
|
FFileName:=AFileName;
|
|
FValues.Clear;
|
|
FValid:=false;
|
|
Reader:=nil;
|
|
{$IFDEF WINDOWS}
|
|
Reader:=TWinPEImageResourceReader.Create;
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
Reader:=TElfResourceReader.Create;
|
|
{$ENDIF}
|
|
|
|
if Reader = nil then
|
|
exit;
|
|
|
|
Res:=TResources.Create;
|
|
V:=nil;
|
|
try
|
|
Res.LoadFromFile(AFileName, Reader);
|
|
for i:=0 to Res.Count-1 do
|
|
begin
|
|
if Res[i] is TVersionResource then
|
|
V:=Res[i] as TVersionResource;
|
|
end;
|
|
FValid:=Assigned(V);
|
|
if FValid then
|
|
DoVersionInfo(V);
|
|
finally
|
|
Res.Free;
|
|
Reader.Free;
|
|
end;
|
|
end;
|
|
|
|
function TRxVersionInfo.GetVerValue(const VerName: string): string;
|
|
begin
|
|
Result:=FValues.Values[VerName];
|
|
end;
|
|
|
|
function TRxVersionInfo.GetWidgetName: string;
|
|
begin
|
|
{$IF (lcl_fullversion < 01070000)}
|
|
Result:=sWidget + LCLPlatformDirNames[WidgetSet.LCLPlatform];
|
|
{$ELSE}
|
|
Result:=sWidget + LCLPlatformDisplayNames[WidgetSet.LCLPlatform];
|
|
{$ENDIF}
|
|
end;
|
|
|
|
end.
|