此代码可以跨四个平台,以下将重要代码贴上
【第一步】:在USE段引用
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,System.Variants,
{$IFDEF MSWINDOWS}
Winapi.Windows,
{$ENDIF}
{$IFDEF ANDROID}
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
FMX.Helpers.Android,
Androidapi.Helpers, // XE7 需要引入
{$ENDIF}
{$IFDEF IOS}
FMX.Platform.iOS,
iOSapi.Foundation,
Macapi.ObjectiveC,
{$ENDIF}
{$IFDEF MACOS}
FMX.Platform.Mac,
Macapi.Foundation,
Macapi.ObjectiveC,
{$ENDIF}
FMX.ExtCtrls;
【第二步】:编写获取版本号的函数
{$IFDEF MSWINDOWS} //Windows系统获取版本号
procedure GetBuildInfo(var V1, V2, V3, V4: word);
var
VerInfoSize, VerValueSize, Dummy: DWORD;
VerInfo: Pointer;
VerValue: PVSFixedFileInfo;
begin
VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
if VerInfoSize > 0 then
begin
GetMem(VerInfo, VerInfoSize);
try
if GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo) then
begin
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;
end;
finally
FreeMem(VerInfo, VerInfoSize);
end;
end;
end;
function GetBuildInfoAsString: string;
var
V1, V2, V3, V4: word;
begin
GetBuildInfo(V1, V2, V3, V4);
Result := IntToStr(V1) + '.' + IntToStr(V2) + '.' +
IntToStr(V3) + '.' + IntToStr(V4);
end;
{$ENDIF}
{$IFDEF ANDROID} //ANDROID系统获取软件版本号
function GetAndroidVersion:string;
var
PackageManager: JPackageManager;
PackageInfo: JPackageInfo;
begin
PackageManager := TAndroidHelper.Context.getPackageManager;
PackageInfo := PackageManager.getPackageInfo
(TAndroidHelper.Activity.getPackageName, 0);
Result := JStringToString(PackageInfo.versionName);
end;
{$ENDIF}
{$IF Defined(IOS) or Defined(MACOS)} //苹果系统获取版本号
var AppNameKey: Pointer;
AppBundle: NSBundle;
NSAppName: NSString;
begin
Memo1.BeginUpdate;
Memo1.Lines.Add('OS : iOS');
AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
AppNameKey := (NSSTR('CFBundleName') as ILocalObject).GetObjectID;
NSAppName := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey));
Memo1.Lines.Add('CFBundleName : ' + UTF8ToString(NSAppName.UTF8String));
AppNameKey := (NSSTR('CFBundleDisplayName') as ILocalObject).GetObjectID;
NSAppName := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey));
Memo1.Lines.Add('CFBundleDisplayName : ' + UTF8ToString(NSAppName.UTF8String));
AppNameKey := (NSSTR('CFBundleIdentifier') as ILocalObject).GetObjectID;
NSAppName := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey));
Memo1.Lines.Add('CFBundleIdentifier : ' + UTF8ToString(NSAppName.UTF8String));
AppNameKey := (NSSTR('CFBundleVersion') as ILocalObject).GetObjectID;
NSAppName := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey));
Memo1.Lines.Add('CFBundleVersion : ' + UTF8ToString(NSAppName.UTF8String));
Memo1.EndUpdate;
end;
{$ENDIF}
【第三步】:调用函数,以WINDOWS为例
procedure TFrmMain.FormShow(Sender: TObject);
begin
Label2.Text:='Ver : ' + GetBuildInfoAsString ;
end;