关于版本信息资源--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种,如下表所示:
版本信息字符串类型
定义版本信息字符串的时候要注意,所有的字符串必须是以NULL结尾的串,所以要在字符串尾加上\0。
【注:本文是节选自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 | 特殊内部版本说明 | 特殊说明 |
相关文章推荐
- XML JSON解析--基本功能
- Win32 二进制资源格式(全)
- 题目1007:奥运排序问题
- 利用GetIfTable ,GetIfEntry 实时判断网线插拔状态
- 关于增强和查找增强点
- DOS系统功能调用表(INT 21H)
- 解决ADB server didn't ACK问题
- 在程式中对键盘、鼠标、显示器、桌面 操作小结
- Linux下例行性工作自结
- 随手链接
- 【Unity3D】【NGUI】UISprite
- R语言的常用函数速查
- 解读ClassLoader
- 修改win7 system32目录权限
- jQuery 学习笔记 事件辅助器
- 流编辑器sed
- 谷歌向左,百度向右
- 数据库-基础2
- webbrowser selstart selLength
- “百度”凭啥一手遮天