zoukankan      html  css  js  c++  java
  • 取得 APP 自己的版本号 (狠跨 4 个平台)

    XE7 源码下载:[原创]取得APP自己的版本号(狠跨4个平台)XE7.zip

    XE6 源码下载:[原创]取得APP自己的版本号(狠跨4个平台)XE6.zip

    XE5 源码下载:[原创]取得APP自己的版本号(狠跨4个平台).zip 

    //------------------------------------------------------------------------------
    // by [龟山]阿卍 QQ:1467948783
    // http://www.cnblogs.com/onechen/
    //------------------------------------------------------------------------------
    
    unit Main;
    
    interface
    
    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.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
      FMX.Memo, FMX.StdCtrls;
    
    type
      TForm1 = class(TForm)
        ToolBar1: TToolBar;
        Label1: TLabel;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    {$IFDEF MSWINDOWS}
    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}
    
    procedure TForm1.FormCreate(Sender: TObject);
    {$IFDEF MSWINDOWS}
    begin
         Memo1.BeginUpdate;
    
         Memo1.Lines.Add('OS : Windows');
         Memo1.Lines.Add('ver : ' + GetBuildInfoAsString);
    
         Memo1.EndUpdate;
    end;
    {$ENDIF}
    
    {$IFDEF ANDROID}
    var PackageInfo: JPackageInfo;
        PackageName: JString;
    begin
         Memo1.BeginUpdate;
    
         Memo1.Lines.Add('OS : Android');
         Memo1.Lines.Add('applicationLabel : ' + GetApplicationTitle);
    
         PackageName := SharedActivityContext.getPackageName;
         Memo1.Lines.Add('packageName : ' + JStringToString(PackageName));
    
         PackageInfo := SharedActivityContext.getPackageManager.getPackageInfo(PackageName, 0);
         Memo1.Lines.Add('versionName : ' + JStringToString(PackageInfo.versionName));
    
         Memo1.EndUpdate;
    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}
    
    end.
  • 相关阅读:
    SoapUI 使用笔记
    git 使用笔记(二)
    git 使用笔记(一)
    jquery 拓展
    hdu 1024 Max Sum Plus Plus (DP)
    hdu 2602 Bone Collector (01背包)
    hdu 1688 Sightseeing (最短路径)
    hdu 3191 How Many Paths Are There (次短路径数)
    hdu 2722 Here We Go(relians) Again (最短路径)
    hdu 1596 find the safest road (最短路径)
  • 原文地址:https://www.cnblogs.com/onechen/p/3627942.html
Copyright © 2011-2022 走看看