Qt在windows与Mac OS中获取执行程序版本号
QString GetFileVertion(QString aFullName)
{
QString vRetVersion;
string vFullName = QStringToString(aFullName);
char vVersion[256] = {0};
DWORD vHandle = 0;
DWORD vInfoSize = 0;
vInfoSize = ::GetFileVersionInfoSize(vFullName.c_str(), &vHandle);
if(vInfoSize <= 0)
{
return false;
}
char *pData = new char[vInfoSize + 1];
memset(pData, 0, vInfoSize + 1);
if(!::GetFileVersionInfo(vFullName.c_str(), NULL, vInfoSize, pData))
{
if(pData)
{
delete pData;
}
return FALSE;
}
string vTempStr = "\\";
VS_FIXEDFILEINFO *pFileInfo;
unsigned int vUInfoSize = 0;
if(!::VerQueryValue(pData, vTempStr.c_str(), (void**)&pFileInfo, &vUInfoSize))
{
if(pData)
{
delete pData;
}
return false;
}
WORD vVer[4];
vVer[0] = HIWORD(pFileInfo->dwProductVersionMS);
vVer[1] = LOWORD(pFileInfo->dwProductVersionMS);
vVer[2] = HIWORD(pFileInfo->dwProductVersionLS);
vVer[3] = LOWORD(pFileInfo->dwProductVersionLS);
sprintf(vVersion, "%d.%d.%d.%d", vVer[0], vVer[1], vVer[2], vVer[3]);
if(pData)
{
delete pData;
}
string vVerStr = vVersion;
vRetVersion = StringToQString(vVerStr);
return vRetVersion;
CFBundleExecutable
VxActuator
CFBundleGetInfoString
Created by Qt/QMake
CFBundleIconFile
CFBundleIdentifier
com.yourcompany.VxActuator
CFBundlePackageType
APPL
CFBundleSignature
????
CFBundleVersion
V0.8.0.001
NOTE
This file was generated by Qt/QMake.
V0.8.0.001
QString GetFileVertion(QString aFullName)
{
QString vRetVersion;
QString vFullName = aFullName + "/Contents/Info.plist";
if (!VxIsFileExist(vFullName))
{
return "";
}
QFile vXmlFile(vFullName);
if (!vXmlFile.open(QIODevice::ReadOnly))
{
vXmlFile.close();
return "";
}
QTextStream vReadStream(&vXmlFile);
QTextCodec *vCodec = QTextCodec::codecForName("UTF-8");
vReadStream.setCodec(vCodec);
QString vXmlDataStr = vReadStream.readAll();
vXmlFile.close();
QDomDocument vXmlDoc;
if (!vXmlDoc.setContent(vXmlDataStr))
{
return "";
}
QDomElement vXmlRoot = vXmlDoc.documentElement();
if (QString::compare(vXmlRoot.tagName(), "plist", Qt::CaseInsensitive) != 0)
{
return "";
}
QDomNode vDictNode = vXmlRoot.namedItem("dict");
if (vDictNode.isNull())
{
return "";
}
QDomElement vDictElement = vDictNode.toElement();
QDomNode vChildNode = vDictElement.firstChild();
while(!vChildNode.isNull())
{
QDomElement vChildElement = vChildNode.toElement();
if(QString::compare(vChildElement.tagName(), "key", Qt::CaseInsensitive) == 0)
{
if(QString::compare(vChildElement.text(), "CFBundleVersion", Qt::CaseInsensitive) == 0)
{
vChildNode = vChildNode.nextSibling();
vRetVersion = vChildNode.toElement().text();
break;
}
}
vChildNode = vChildNode.nextSibling();
}
return vRetVersion;
}
http://blog.chinaunix.net/uid-20718335-id-2975923.html
Qt在windows与Mac OS中获取执行程序版本号的更多相关文章
- 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...
- 操作系统Unix、Windows、Mac OS、Linux的故事
电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...
- Unix、Windows、Mac OS、Linux系统故事
我们熟知的操作系统大概都是windows系列,近年来Apple的成功,让MacOS也逐渐走进普通用户.在服务器领域,恐怕Linux是无人不知无人不晓.他们都是操作系统,也在自己的领域里独领风骚.这都还 ...
- Linux最终将会领先于Windows、Mac OS!
Linux最终将会领先于Windows.Mac OS! 众所周知,硬件离开了软件就像人失去灵魂,而操作系统作为软件中的基础部分,更是重中之重!无论手机.电脑.还是服务器一旦离开了操作系统,比之一堆废铁 ...
- [转]操作系统Unix、Windows、Mac OS、Linux的故事
[写得很江湖气,可惜找不到原作者了] 文章转自:http://blog.csdn.net/wenmingchan/article/details/49925379 http://www.jb51.ne ...
- 【转】操作系统Unix、Windows、Mac OS、Linux的故事
电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...
- VMware Mac OS中无法找到适应的分辨率的解决办法
使用VMware安装的Mac OS中,有时在显示器的分辨率中的选择项里面,没有对应显示的分辨率可供选择的时候(无法自适应),可以在虚拟机设置里,显示器中修改强制分辨率.修改过后重启虚拟机,就可以有对应 ...
- mac os中的一些快捷键使用及基础软件安装
mac os中terminal标签页的切换 Command+Shift+{} { 切换到左边的标签页 } 切换到右边的标签页 普通键盘对应于mac下的按键: CTRL->CONTROL WIN ...
- MAC OS 中mount nfs 报错问题.
记一下 MAC OS 中mount nfs 报错问题. 环境和配置文件 NFS 服务端 Ubuntu 安装 apt install nfs-kernel-server 服务端的配置文件 cat /et ...
随机推荐
- c语言中的#ifndef、#def、#endif等宏是什么意思
#ifndef.(或者#ifndef).#def.#endif等宏这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一 ...
- Java学习之Java中常用对象
java的几种对象(PO,VO,DAO,BO,POJO)解释 一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中 ...
- win7 64位安装 oracle 11G 和 使用 PLSQL Developer 连接服务器
其实基本过程和网上大多数人的完全一样,只是后面的plsql上加了几张图片而已,以此给自己做个记录,万一网上的没了,这里自己还有,会了的大森(大神),就请路过吧 1.双击开始安装
- php curl函数实例
<?php function login(){ $url = 'http://jspatch.qq.com/offline/check?qver=6.2.0.427&hver=0& ...
- Hibernate之dynamic-update
问题:设置了dynamic-update, 可是事实上并没有按照期望进行了update. 案例代码如下: 1.持久化对象 package com.jdw.hibernate.entities; imp ...
- GoF——职责链模式
职责链模式(chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 ...
- Oracle查看和修改连接数(进程/会话/并发等等)
查询数据库当前进程的连接数及会话的连接数.并发连接数以及会话情况等等,感兴趣的你可以参考下哈,希望可以帮助到你 1.查询数据库当前进程的连接数: 复制代码 代码如下: select count(* ...
- JS中的prototype属性
JavaScript是基于对象的,任何元素都可以看成对象.然而,类型和对象是不同的.本文中,我们除了讨论类型和对象的一些特点之外,更重要的 是研究 如何写出好的并且利于重用的类型.毕竟,JavaSc ...
- HDU ACM 1046 Gridland 找规律
分析:给出一个矩阵.问最短从一个点经过全部点以此回到起点的长度是多少.绘图非常好理解.先画3*4.3*3.4*4的点阵图案.试着在上面用最短路走一走,能够发现当矩形点阵的长宽都是奇数时,最短路中必然有 ...
- android 三级菜单 BaseExpandableListAdapter
在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...