扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
function GetFileVersionInfo( lptstrFilename: PChar; // 文件名 dwHandle: DWORD; // 忽略 dwLen: DWORD; // 缓冲区大小 lpData: Pointer // 版本信息缓冲区 ): BOOL; stdcall; |
参数说明:
lptstrFilename,一个以NULL结束字符串,它指定了期望从中获取版本详细的文件名。如果文件名不包含完整路径,函数将使用LoadLibrary函数的默认搜索次序进行搜索。在Windows 95/98/Me操作系统中路径名不能超过126个字符。
dwHandle,这个参数没有使用,将被忽略。
dwLen,请先调用GetFileVersionInfoSize函数确定文件版本信息的字节数大小。dwLen必须等于或大于这个值。如果lpDate指向的缓冲区空间不够,函数将根据实际大小裁减出文件的版本信息。
lpData,指向一个用于保存函数调用后返回的文件版本信息的缓冲区。
如果函数调用成功,它将返回True;否则返回False。可通过GetLastError函数得到扩展的错误信息。
在调用GetFileVersionInfo函数前必须先调用GetFileVersionFileSize。为了从文件版本信息中获取有用信息,必须使用VerQueryValue函数。
1.2. GetFileVersionInfoSize函数
GetFileVersionInfoSize函数被用来判断操作系统是否能够从指定文件中获取版本信息。如果存在版本信息,便返回以字节为单位的这些信息所占用空间的大小。其Delphi函数声明如下:
function GetFileVersionInfoSize( lptstrFilename: PChar; // 文件名 var lpdwHandle: DWORD // set to zero ): DWORD; stdcall; |
参数说明:
lptstrFilename,一个以NULL结束字符串,它指明期望从哪个文件中获取版本信息的文件名。
lpdwHandle,一个指向将被函数设置为0的变量的指针。
如果函数调用成功,它将返回文件版本信息的字节大小;否则返回0,可通过GetLastError函数得到扩展的错误信息。
在调用GetFileVersionInfo函数前应先调用GetFileVersionInfoSize函数。GetFileVersionInfoSize函数的返回值确定了GetFileVersionInfo函数所使用的版本信息缓冲区的大小。
1.3. VerLanguageName函数
VerLanguagename函数被用来获取与指定的二进制微软语言标示相关联的语言描述字符串。其Delphi函数声明如下:
function VerLanguageName( wLang: DWORD; // 微软语言标识符 szLang: PChar; // 语言描述缓冲区 nSize: DWORD // 缓冲区大小 ): DWORD; stdcall; |
参数说明:
wLang,语言标识符,是一个二进制数字。指定二进制语言标识符。如果向得到完整的语言标识符列表,请参见语言标识符部分的内容。举个例子,与语言标识符0x040A相关联的描述字符串就是“卡斯蒂利亚西班牙语”。如果是一个未知的标识符,那么szLang参数就会指向一个缺省字符串--“Language Neutral”。
szLang,这个参数指向一个缓冲区。这个缓冲区用于存储由wLang参数所确定的、用来描述语言的、以NULL结尾的字符串。
nSize 指定缓冲区的大小,单位是字符数量。
函数将返回存储在缓冲区中字符串的以字符为单位的大小。返回值不包含结束NULL字符。如果描述字符串小于或等于缓冲区的大小,那么整个描述字符串将保存在这个缓冲区中;否则,缓冲区中将之保留描述字符串的前面大小等于缓冲区大小的部分。
如果发生错误,返回值将等于0。未知的语言标识符不会产生错误。
通常,安装程序通过这个函数来翻译从VarQuery函数返回的语言标识符。当出现语言冲突的时候,这个得到的文本字符串便可以用在一个向用户询问怎样处理的对话框中,提示用户进行处理。
1.4. VerQueryValue函数
VerQueryValue函数被用来从指定的版本信息资源中获取指定版本信息。最常用的获取版本信息的逻辑流程是:先调用GetFileVersionInfoSize函数,紧接着再调用GetFileVersionInfo函数,最后再调用VerQueryValue函数。其Delphi函数声明如下:
function VerQueryValue( pBlock: Pointer; // 存放版本资源的缓冲区 lpSubBlock: PChar; // 期望获取的值 var lplpBuffer: Pointer; // 指向存放版本值缓冲区的指针 var puLen: UINT // 版本信息长度 ): BOOL; stdcall; |
参数说明:
pBlock,一个指向用于存储版本信息资源的缓冲区的指针,这个版本信息资源是从GetFileVersionInfo函数返回的。
lpSubBlock,指向一个零结尾的字符串,指定到底获得哪个版本信息值。这个字符串必须由被反斜线符号(\)分开的名字组成如下格式之一:
→“\”,指定根区域。函数将返回一个指向VS_FIXEDFIELDFILEINFO结构的版本信息资源。
→“\VarFileInfo\Translation”,指定一个保存在可变类型变量信息的结构中的转换阵列。函数返回一个指向语言和代码页标识符数组的指针。应用程序可以使用这些标识符来访问存储在版本信息资源中的特定语言字符串表结构。
→“\StringFileInfo\lang-codepage\string-name”,指定存储在特定语言字符串表中结构的值。其中,lang-codepage的书写格式是:用双字(DWORD)表示的、保存在资源中的转换阵列的语言与代码页标识符对,并且需要书写成十六进制形式的字符串;string-name必须是在后面注释中预定义的字符串之一。函数根据指定的语言与代码页,返回一个与之相关的字符串。
lplpBuffer,一个指向用于保存指向被请求的版本信息缓冲区的变量的指针。简单的说,就是一个指向指针的指针。
puLen,指向一个保存版本信息长度的缓冲区。
如果指定的版本信息结构存在并且有效,函数将返回一个非0值。如果长度缓冲区的地址等于0,指定的版本信息名称将无效。
并且,在指定的名称不存在或指定的资源无效时,函数的返回值将等于0。
以下列表是预定义的版本信息统一字符编码标准字符串:
Comments、InternalName、ProductName、CompanyName、LegalCopyright、ProductVersion、FileDescription、LegalTrademarks、PrivateBuild、FileVersion、OriginalFilename、SpecialBuild
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者