您的位置:首页 > 其它

关于版本信息资源--VERSIONINFO

2013-12-07 19:41 381 查看

【注:本文是节选自luqingfei@C++的“Win32汇编--使用资源--版本信息资源”】

版本信息是以VERSIONINFO类型的资源保存在应用程序中的,里面可以定义的信息包括文件的版本号、创建单位和语种等。版本信息的定义是可选的,一个程序可以不定义版本信息资源,如果定义了的话,也不一定要定义全部信息项目。

如果一个文件定义有版本信息资源,那么在文件的属性页(在文件图标上按鼠标右键,在弹出的菜单上选择)上就会有一个“版本”页面。

1、版本信息资源的定义

//Version.rc

1 VERSIONINFO

FILEVERSION 1,2,3,4

PRODUCTVERSION 2,3,4,5

FILEOS VOS_WINDOWS32

FILETYPE VFT_APP

FILESUBTYPE VFT2_UNKNOWN

BEGIN

BLOCK "VerFileInfo"

BEGIN

VALUE "Translation", 0x804, 0x4b0

END

BLOCK "StringFileInfo"

BEGIN

BLOCK "080404b0"

BEGIN

VALUE "Comments", "Here is Comments\0"

VALUE "CompanyName", "Here is CompanyName\0"

VALUE "FileDescription", "Here is FileDescription\0"

VALUE "FileVersion", "1,0,0,1\0"

VALUE "InternalName", "Here is InternalName\0"

VALUE "LegalCopyright", "Here is LegalCopyright\0"

VALUE "LegalTrademarks", "Here is LegalTrademarks\0"

VALUE "OriginalFilename", "Here is OriginalFilename\0"

VALUE "PrivateBuild", "Here is PrivateBuild\0"

VALUE "ProductName", "Here is ProductName\0"

VALUE "ProductVersion", "1,0,0,1\0"

VALUE "SpecialBuild", "Here is SpecialBuild\0"

END

END

END

这些定义语句的含义。首先,版本信息定义的语句格式是:

版本信息资源ID VERSIONINFO

固定属性

BEGIN

块声明定义

……

END

版本信息资源ID的取值必须为1,如果不为1则属性页上的“版本”信息是无法显示出来的。(怪异!)

可以定义的固定属性有:

l FILEVERSION——定义文件版本号,可以定义4个16位版本号xx.xx.xx.xx。
l PRODUCTVERSION——定义产品版本号,可以定义4个16位版本号xx.xx.xx.xx。
l FILELAGSMASK——指定FILELAGS属性中哪些位有效。
l FILELAGS——文件标志,是一些标志位的组合:VS_FF_PATCHED,VS_FF_DEBUG,VS_FF_PRIVATEBUILD,VS_FF_INFOINFERRED,VS_FF_PRERELEASE和VS_FF_SPECI_ALBUILD。
l FILEOS——定义适用的操作系统,可以定义为VOS_UNKNOWN,VOS_DOS,VOS_NT,VOS_WINDOWS16,VOS_WINDOWS32,VOS_DOS_WINDOWS16,VOS_DOW_WINDOWS32或VOS_NT_WINDOW32。
l FILETYPE——定义文件的子类型。当文件类型是VFT_DRV(驱动程序)的时候,这里可以是VFT2_UNKNOWN,VFT2_DRV_COMM,VFT2_DRV_PRINTER,VFT2_DRV_KEYBOARD,VFT2_DRV_LANGUAGE,VFT2_DRV_DISPLAY,VFT2_DRV_MOUSE,VFT2_DRV_NETWORK,VFT2_DRV_SYSTEM,VFT2_DRV_INSTALLABLE或VFT2_DRV_SOUND;当文件类型是VFT_FONT(字体)的时候,这里可以是VFT2_UNKNOWN,VFT2_FONT_RASTER,VFT2_FONT_VECTOR或VFT2_FONT_TRUETYPE。

当固定属性定义完成以后,需要定义一些块声明,块声明有两种:变量型的信息块和字符串类型的信息块,变量类型的信息块定义如下:

BLOCK “VerFileInfo”

BEGIN

VALUE “Translation”, 语言ID,字符集ID

……

END

语言ID的常用值有0x0404(繁体中文)、0x0409(美国英语)和0x0804(简体中文),字符集ID的常用值有0(7位ASCII)、950(台湾GB5)和1200(Unicode)。一般使用0x804,0x4b0来定义,也就是简体中文和Unicode(0x4b0=1200)。其他还有很多取值,可以查看Rc.exe的帮助文件。

变量类型信息块用来表示VERSIONINFO资源中定义有哪些语言和字符集的字符串类型信息块。如上例中有一句VALUE “Translation”, 0x804, 0x4b0表示对应有一个名为“080404b0”的字符串类型的信息块。

字符串信息块的定义语句为:

BLOCK “StringFileInfo”

BEGIN

BLOCK “语言集”

BEGIN

VALUE “字符串名称”, “字符串”

……

END

END

语言集就是变量类型中定义的,其名称一定要是将语言ID和字符集ID组合成一个8位的16进制的格式,以上例文件来说明,当变量类型的信息块中定义0x804, 0x4b0时,语言集名称就是“080404b0”,在语言集块的定义中,还可以定义多条字符串型的版本信息,这些版本信息的字符串名有12种,如下表所示:

版本信息字符串类型
字符串名称

属性页位置

说明

Comments

备注

有关程序的附加说明信息

CompanyName

公司

开发产品的公司

FileDescription

描述

有关文件的简单描述

FileVersion

文件版本

如1.50、5.0.RC2等字符串型的版本信息

InternalName

内部名称

LegalCopyright

版权

文件的所有版权信息

LegalTrademarks

合法商标

文件的所有注册商标信息

OriginalFilename

源文件名

原始文件名,从这里可以得知文件是否被改名

PrivateBuild

个人用内部版本说明

作者私人信息

ProductName

产品名称

文件所属的产品名称

ProductVersion

产品版本

文件所属的产品的版本号

SpecialBuild

特殊内部版本说明

特殊说明

定义版本信息字符串的时候要注意,所有的字符串必须是以NULL结尾的串,所以要在字符串尾加上\0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: