之前在msdn上Version Information看到文件版本信息的介绍,看着整体比较复杂,就一直没做。现在需要获取ocx文件的版本号,所以查找了下相关资料,比较有用的就是VS_FIXEDFILEINFO结构,获取这个参数就基本可以完成任务了。

代码如下:

 //typedef struct tagVS_FIXEDFILEINFO
//{
// DWORD dwSignature; /* e.g. 0xfeef04bd */
// DWORD dwStrucVersion; /* e.g. 0x00000042 = "0.42" */
// DWORD dwFileVersionMS; /* e.g. 0x00030075 = "3.75" */
// DWORD dwFileVersionLS; /* e.g. 0x00000031 = "0.31" */
// DWORD dwProductVersionMS; /* e.g. 0x00030010 = "3.10" */
// DWORD dwProductVersionLS; /* e.g. 0x00000031 = "0.31" */
// DWORD dwFileFlagsMask; /* = 0x3F for version "0.42" */
// DWORD dwFileFlags; /* e.g. VFF_DEBUG | VFF_PRERELEASE */
// DWORD dwFileOS; /* e.g. VOS_DOS_WINDOWS16 */
// DWORD dwFileType; /* e.g. VFT_DRIVER */
// DWORD dwFileSubtype; /* e.g. VFT2_DRV_KEYBOARD */
// DWORD dwFileDateMS; /* e.g. 0 */
// DWORD dwFileDateLS; /* e.g. 0 */
//} VS_FIXEDFILEINFO;
{
char szAppFullPath[_MAX_PATH] = {}; GetModuleFileName(NULL,szAppFullPath,MAX_PATH);//得到程序模块名称,全路径 //获取当前文件的版本信息
DWORD dwLen = GetFileVersionInfoSize(szAppFullPath,NULL);
char *pszAppVersion = new char[dwLen+];
if(pszAppVersion)
{
memset(pszAppVersion,,sizeof(char)*(dwLen+));
GetFileVersionInfo(szAppFullPath,NULL,dwLen,pszAppVersion);
CString strVersion;
UINT nLen();
VS_FIXEDFILEINFO *pFileInfo(NULL);
VerQueryValue(pszAppVersion,"\\",(LPVOID*)&pFileInfo,&nLen);
if(pFileInfo)
{
//获取文件版本号
strVersion.Format("%d.%d.%d.%d",HIWORD(pFileInfo->dwFileVersionMS),
LOWORD(pFileInfo->dwFileVersionMS),
HIWORD(pFileInfo->dwFileVersionLS),
LOWORD(pFileInfo->dwFileVersionLS));
}
}
}

基本思路就是先获取可执行文件所在的全路径,然后使用GetFileVersionInfo函数,获取版本信息;之后使用VerQueryValue函数,查询版本信息。

获取windows可执行文件的version信息(版本号)的更多相关文章

  1. [C语言](二)01 获取Windows图形构件大小信息

    SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<& ...

  2. Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件

    由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...

  3. sigar获取Windows系统的硬件信息进行JAVA后台系统资源监控

    windows下,将sigar-amd64-winnt.dll复制到jdk的bin目录下或者拷贝到WEB-INF/lib下 linux下,将libsigar-amd64-linux.so拷贝到jdk的 ...

  4. python使用wmi模块获取windows下的系统信息监控系统-乾颐堂

    Python用WMI模块获取Windows系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 本文实例讲述了python使用wmi模块获取w ...

  5. 获取windows版本信息的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 个人不建议用 GetVersion 或GetVersionEx 之类的 API 来获取系统版本号.注意微软也说过,这个 ...

  6. C++通用WMI接口实现获取Windows操作系统内核版本号

    作为一名Windows开发者,能熟练掌握WMI技术,在开发Windows应用程序的时候往往能够事半功倍.今天来给大家分享一个使用WMI来获取Windows操作系统内核版本号的例子. 首先我们打开WMI ...

  7. 获取Windows平台下 安装office 版本位数信息

    最近在处理客户端安装程序过程,有一个需求:需要检测Windows平台下安装office 版本信息以及获取使用的office是32 位还是64 位: 当检测出office 位数为64位时,提示当前off ...

  8. Python使用wmi获取Windows相关信息

    在使用Python获取Windows系统上的相关的信息可以使用WMI接口来获取, 什么是wmi? WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问.配置.管理和监 ...

  9. Delphi调用API函数获取Windows目录信息、获取System目录信息、获取Temp临时文件目录信息

    var Str1, Str2: Array[..Max_Path]of Char;//开辟缓冲区 Str3: Array[..]of Char; begin GetWindowsDirectory(@ ...

随机推荐

  1. Mac终端查看sqlite3数据库、表数据等(含sqlite可视化工具下载)

    背景: 有时候,我们在用FMDB等库处理iOS数据库时,沙盒里保存的数据库格式为.sqlite3. 那么,我们如何查看这个数据库呢? 其实有两种方法: 1.借助工具 - Sqlite Database ...

  2. mysql--SQL编程(关于mysql中的日期,关于重叠) 学习笔记2.2

    1.日期中的重叠问题建表sessions: CREATE TABLE `sessions` ( `id` ) NOT NULL AUTO_INCREMENT, `app` ) NOT NULL, `u ...

  3. shell脚本中解决SCP命令需要输入密码的问题

    使用密钥文件.       这里假设主机A(192.168.100.3)用来获到主机B(192.168.100.4)的文件.   在主机A上执行如下命令来生成配对密钥: ssh-keygen -t r ...

  4. LINUX-vmstat命令讲解

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况. 一般vmstat工具的使用是通过两个 ...

  5. ios开发中用过的一些外部库总结 cocoapods list

    下面几个库是在之前的一个ios app开发中使用过的一些外部库: 1. zbar :2. shakebox :3. processbar :4. tableviewcontroller :新版的sta ...

  6. Python控制台输出带颜色的文字(高亮显示)方法

    在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想要的信 ...

  7. Android Support Library 23.2介绍(翻译自官方文档)

    Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...

  8. SpringApplication初始化

    SpringApplication: private void initialize(Object[] sources) { if (sources != null && source ...

  9. ELK 的插件安装(head)

    这里我装了一个head插件和kopf的插件 ./plugin install mobz/elasticsearch-head ./plugin install lmenezes/elasticsear ...

  10. JAXB--@XmlElementWrapper注解和泛型一起使用

    当java对象的某个属性使用泛型时,普通对象都没问题,但是遇到HashSet这种集合类封装的元素时,就会出现元素内容序列化不出来的问题,详见如下: 一.示例: 第一步:定义java对象 package ...