取得 APP 自己的版本号 (跨 4 个平台)
http://www.cnblogs.com/onechen/p/3627942.html
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.
取得 APP 自己的版本号 (跨 4 个平台)的更多相关文章
- 取得 APP 自己的版本号 (狠跨 4 个平台)
XE7 源码下载:[原创]取得APP自己的版本号(狠跨4个平台)XE7.zip XE6 源码下载:[原创]取得APP自己的版本号(狠跨4个平台)XE6.zip XE5 源码下载:[原创]取得APP自己 ...
- (译)cocos2d-x跨android&ios平台开发入门教程
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- 转:一个跨WINDOWS LINUX平台的线程类
来源:http://blog.csdn.net/dengxu11/article/details/7232681 继Windows下实现一个CThread封装类之后,这里我再实现一个跨WINDOWS ...
- App山寨疯狂 爱加密Apk加密平台防破解
App山寨疯狂 爱加密Apk加密平台防破解,Android系统由于其开源性,眼下已占领全球智能机近80%的市场,远超微软的WP系统和苹果的IOS系统.然而也正是由于开源性,Android盗版App在国 ...
- C#--图片上传(PC端和APP)保存及 跨域上传说明
手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程 ...
- Hbuilder编辑App时,ajax跨域访问失败问题
今天试着用Hbuilder写app的前段显示页面,在第一步时就被打住了,ajax异步调用服务器的登录接口时,报错, 显示这样的错误 XMLHttpRequest cannot loadhttp://w ...
- html5 app开发实例 Ajax跨域访问C# webservices服务
通过几天的研究效果,如果在vs2010工具上通过webservice还是比较简单的,毕竟是一个项目. 如果您想通过HTML5 做出来的移动APP去访问c#做出来的webservice,那么就没那么简单 ...
- js判断是否是app,及版本号
判断是否是android,ios,qq,wetchat export const Config = {}; Config.ua = navigator.userAgent.toLowerCase(); ...
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去
在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 Remo ...
随机推荐
- SQL Server 2016/2014/2012/2008/2005/2000简体中文企业版下载地址
为什么只提供企业版下载呢?因为不管你是学生还是工作研究人员,企业版都是功能最为齐全的一个版本,比如企业版都集成了SQL Server Management Studio管理界面(俗称企业管理器的可视化 ...
- POJ1950----DFS
Dessert Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6193 Accepted: 2299 Descripti ...
- Plants vs. Zombies(二分好题+思维)
Plants vs. Zombies http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5819 BaoBao and DreamG ...
- Eclipse中的SVN操作
--------------------siwuxie095 Eclipse 中的 SVN 操作 (一)发布项目 ...
- python2.7中可以使用到的一些模块地址
1.reportlab:由很多部分组成且允许用户使用多种方法创建输出,地址: 下载ReportLab https://pypi.python.org/simple/reportlab/ http:// ...
- Excel日期格式调整
3-Aug-2008 自定义格式: [$-809]d-mmm-yyyy;@ Aug-2008 自定义格式: [$-809]mmm-yyyy;@
- TEXTMETRICW 结构记录
if( flags == DT_RIGHT ) { SIZE Size = {,}; TEXTMETRICW temp; if (font->GetTextMetricsW(&temp) ...
- Asia Stock Exchanges[z]
Asia Stock Exchanges July 7, 2009 This article is to summarise the trading rules of some Asia stocke ...
- IIS 6.0/7.0/7.5、Nginx、Apache 等服务器解析漏洞总结
IIS 6.0 1.目录解析:/xx.asp/xx.jpg xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0 会将 xx.jpg 解析为 asp 文件. ...
- SSH登录到远程linux机器并执行命令
一. 1.JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成 ...