<span style="color: #0000ff;">unit
<span style="color: #000000;"> Main;<span style="color: #0000ff;">interface
<span style="color: #0000ff;">uses<span style="color: #000000;">
System.SysUtils,System.Types,System.UITypes,System.Classes,System.Variants,<span style="color: #008000;">{<span style="color: #008000;">$IFDEF MSWINDOWS<span style="color: #008000;">}<span style="color: #000000;">
Winapi.Windows,<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}
<span style="color: #008000;">{<span style="color: #008000;">$IFDEF ANDROID<span style="color: #008000;">}<span style="color: #000000;">
Androidapi.JNI.GraphicsContentViewText,Androidapi.JNI.JavaTypes,FMX.Helpers.Android,
Androidapi.Helpers,// XE7 需要引入
<span style="color: #008000;"> {<span style="color: #008000;">$ENDIF<span style="color: #008000;">}
<span style="color: #008000;">{
<span style="color: #008000;">$IFDEF MACOS<span style="color: #008000;">}<span style="color: #000000;">
FMX.Platform.Mac,Macapi.Foundation,<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}<span style="color: #000000;">FMX.Types,FMX.Controls,FMX.Forms,FMX.Graphics,FMX.Dialogs,FMX.Layouts,FMX.Memo,FMX.StdCtrls;
<span style="color: #0000ff;">type<span style="color: #000000;">
TForm1 = <span style="color: #0000ff;">class<span style="color: #000000;">(TForm)
ToolBar1: TToolBar;
Label1: TLabel;
Memo1: TMemo;
<span style="color: #0000ff;">procedure<span style="color: #000000;"> FormCreate(Sender: TObject);
<span style="color: #0000ff;">private
<span style="color: #008000;">{<span style="color: #008000;"> Private declarations <span style="color: #008000;">}
<span style="color: #0000ff;">public
<span style="color: #008000;">{<span style="color: #008000;"> Public declarations <span style="color: #008000;">}
<span style="color: #0000ff;">end<span style="color: #000000;">;<span style="color: #0000ff;">var<span style="color: #000000;">
Form1: TForm1;<span style="color: #0000ff;">implementation
<span style="color: #008000;">{<span style="color: #008000;">$R *.fmx<span style="color: #008000;">}
<span style="color: #008000;">{<span style="color: #008000;">$IFDEF MSWINDOWS<span style="color: #008000;">}
<span style="color: #0000ff;">procedure GetBuildInfo(<span style="color: #0000ff;">var<span style="color: #000000;"> V1,V2,V3,V4: word);
<span style="color: #0000ff;">var<span style="color: #000000;">
VerInfoSize,VerValueSize,Dummy: DWORD;
VerInfo: Pointer;
VerValue: PVSFixedFileInfo;
<span style="color: #0000ff;">begin<span style="color: #000000;">
VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(<span style="color: #800080;">0<span style="color: #000000;">)),Dummy);
<span style="color: #0000ff;">if VerInfoSize > <span style="color: #800080;">0 <span style="color: #0000ff;">then
<span style="color: #0000ff;">begin<span style="color: #000000;">
GetMem(VerInfo,VerInfoSize);
<span style="color: #0000ff;">try
<span style="color: #0000ff;">if GetFileVersionInfo(PChar(ParamStr(<span style="color: #800080;">0)),<span style="color: #800080;">0,VerInfoSize,VerInfo) <span style="color: #0000ff;">then
<span style="color: #0000ff;">begin<span style="color: #000000;">
VerQueryValue(VerInfo,<span style="color: #800000;">'<span style="color: #800000;">\<span style="color: #800000;">'<span style="color: #000000;">,Pointer(VerValue),VerValueSize);
<span style="color: #0000ff;">with VerValue^ <span style="color: #0000ff;">do
<span style="color: #0000ff;">begin<span style="color: #000000;">
V1 := dwFileVersionMS <span style="color: #0000ff;">shr <span style="color: #800080;">16<span style="color: #000000;">;
V2 := dwFileVersionMS <span style="color: #0000ff;">and<span style="color: #000000;"> $FFFF;
V3 := dwFileVersionLS <span style="color: #0000ff;">shr <span style="color: #800080;">16<span style="color: #000000;">;
V4 := dwFileVersionLS <span style="color: #0000ff;">and<span style="color: #000000;"> $FFFF;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #0000ff;">finally<span style="color: #000000;">
FreeMem(VerInfo,VerInfoSize);
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #0000ff;">end<span style="color: #000000;">;<span style="color: #0000ff;">function GetBuildInfoAsString: <span style="color: #0000ff;">string<span style="color: #000000;">;
<span style="color: #0000ff;">var<span style="color: #000000;">
V1,V4: word;
<span style="color: #0000ff;">begin<span style="color: #000000;">
GetBuildInfo(V1,V4);
Result := IntToStr(V1) + <span style="color: #800000;">'<span style="color: #800000;">.<span style="color: #800000;">' + IntToStr(V2) + <span style="color: #800000;">'<span style="color: #800000;">.<span style="color: #800000;">' +<span style="color: #000000;">
IntToStr(V3) + <span style="color: #800000;">'<span style="color: #800000;">.<span style="color: #800000;">' +<span style="color: #000000;"> IntToStr(V4);
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}<span style="color: #0000ff;">procedure<span style="color: #000000;"> TForm1.FormCreate(Sender: TObject);
<span style="color: #008000;">{<span style="color: #008000;">$IFDEF MSWINDOWS<span style="color: #008000;">}
<span style="color: #0000ff;">begin<span style="color: #000000;">
Memo1.BeginUpdate;Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">OS : Windows</span><span style="color: #800000;">'</span><span style="color: #000000;">); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">ver : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> GetBuildInfoAsString); Memo1.EndUpdate;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}<span style="color: #008000;">{<span style="color: #008000;">$IFDEF ANDROID<span style="color: #008000;">}
<span style="color: #0000ff;">var<span style="color: #000000;"> PackageInfo: JPackageInfo;
PackageName: JString;
<span style="color: #0000ff;">begin<span style="color: #000000;">
Memo1.BeginUpdate;Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">OS : Android</span><span style="color: #800000;">'</span><span style="color: #000000;">); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">applicationLabel : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> GetApplicationTitle); PackageName :</span>=<span style="color: #000000;"> SharedActivityContext.getPackageName; Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">packageName : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> JStringToString(PackageName)); PackageInfo :</span>= SharedActivityContext.getPackageManager.getPackageInfo(PackageName,<span style="color: #800080;">0</span><span style="color: #000000;">); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">versionName : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> JStringToString(PackageInfo.versionName)); Memo1.EndUpdate;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}<span style="color: #008000;">{<span style="color: #008000;">$IF Defined(IOS) or Defined(MACOS)<span style="color: #008000;">}
<span style="color: #0000ff;">var<span style="color: #000000;"> AppNameKey: Pointer;
AppBundle: NSBundle;
NSAppName: NSString;
<span style="color: #0000ff;">begin<span style="color: #000000;">
Memo1.BeginUpdate;Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">OS : iOS</span><span style="color: #800000;">'</span><span style="color: #000000;">); AppBundle :</span>=<span style="color: #000000;"> TNSBundle.Wrap(TNSBundle.OCClass.mainBundle); AppNameKey :</span>= (NSSTR(<span style="color: #800000;">'</span><span style="color: #800000;">CFBundleName</span><span style="color: #800000;">'</span>) <span style="color: #0000ff;">as</span><span style="color: #000000;"> ILocalObject).GetObjectID; NSAppName :</span>=<span style="color: #000000;"> TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey)); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">CFBundleName : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> UTF8ToString(NSAppName.UTF8String)); AppNameKey :</span>= (NSSTR(<span style="color: #800000;">'</span><span style="color: #800000;">CFBundleDisplayName</span><span style="color: #800000;">'</span>) <span style="color: #0000ff;">as</span><span style="color: #000000;"> ILocalObject).GetObjectID; NSAppName :</span>=<span style="color: #000000;"> TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey)); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">CFBundleDisplayName : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> UTF8ToString(NSAppName.UTF8String)); AppNameKey :</span>= (NSSTR(<span style="color: #800000;">'</span><span style="color: #800000;">CFBundleIdentifier</span><span style="color: #800000;">'</span>) <span style="color: #0000ff;">as</span><span style="color: #000000;"> ILocalObject).GetObjectID; NSAppName :</span>=<span style="color: #000000;"> TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey)); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">CFBundleIdentifier : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> UTF8ToString(NSAppName.UTF8String)); AppNameKey :</span>= (NSSTR(<span style="color: #800000;">'</span><span style="color: #800000;">CFBundleVersion</span><span style="color: #800000;">'</span>) <span style="color: #0000ff;">as</span><span style="color: #000000;"> ILocalObject).GetObjectID; NSAppName :</span>=<span style="color: #000000;"> TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppNameKey)); Memo1.Lines.Add(</span><span style="color: #800000;">'</span><span style="color: #800000;">CFBundleVersion : </span><span style="color: #800000;">'</span> +<span style="color: #000000;"> UTF8ToString(NSAppName.UTF8String)); Memo1.EndUpdate;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}<span style="color: #0000ff;">end.