"该资源提供了一段VB源码,用于获取外部程序的版本号、产品名称等信息。适用于需要从程序文件中提取元数据的场景。用户可以通过调用提供的函数来查询指定路径的文件(例如:C:\windows\notepad.exe)的相关版本信息。" 在VB编程中,有时我们需要获取已安装程序的详细信息,如版本号、产品名称、内部文件名等。这段源码利用Windows API中的几个关键函数实现了这一功能。主要涉及以下知识点: 1. **GetFileVersionInfo** 函数:这是从`version.dll`库导入的一个函数,用于获取文件的版本信息。它接受4个参数,分别是文件路径(字符串)、句柄(长整型)、长度(长整型)和数据(变体型)。返回值是长整型,表示操作是否成功。 2. **GetFileVersionInfoSize** 函数:同样来自`version.dll`,这个函数用于计算文件版本信息的大小。它接收两个参数,一个是文件路径(字符串),另一个是句柄的变量(长整型),返回值是所需缓冲区的大小。 3. **VerQueryValue** 函数:这是第三个重要的API函数,它从版本块中查询特定信息。参数包括版本信息块(任意类型)、子块路径(字符串)、缓冲区指针(任意类型)和缓冲区长度(长整型)。 4. **MoveMemory** 或 **RtlMoveMemory** 函数:这是一个内存操作函数,来自`Kernel32`库,用于将数据从一个内存位置复制到另一个位置。它接受3个参数,目标地址、源地址和要移动的字节数。 在示例代码中,可以看到如何使用这些函数来获取文件的各个版本信息部分,例如: - `(0)` 通常对应于文件的主版本号。 - `(1)` 对应于次版本号。 - `(2)` 是修订号。 - `(3)` 是内部文件版本号。 - `(4)` 可能是文件的创建日期或时间。 通过适当调整代码,开发者可以获取更多关于目标文件的信息,比如产品名称、版权信息等,这对于软件开发、更新检查、兼容性测试等场景非常有用。 使用这段源码时,需要注意的是,由于它依赖于Windows API,所以只适用于Windows平台的VB应用程序。此外,确保提供的文件路径有效,否则API调用可能会失败。为了提高代码的健壮性和可读性,可以将这些函数封装成一个模块或类,以便在项目中重复使用。
'=====================================================================================
'功能:获得外程序的版本号产品名称等信息
'用法:
'MsgBox GetFileVerInfo("C:\windows\notepad.exe")(0) '版本号
'MsgBox GetFileVerInfo("C:\windows\notepad.exe")(1) '产品名称
'MsgBox GetFileVerInfo("C:\windows\notepad.exe")(2) '公司名称
'MsgBox GetFileVerInfo("C:\windows\notepad.exe")(3) '版权信息
'MsgBox GetFileVerInfo("C:\windows\notepad.exe")(4) '文件描述
'=====================================================================================
Private Declare Function GetFileVersionInfo Lib "version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub MoveMemory Lib "Kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal Length As Long)
Private Declare Function lstrcpy Lib "Kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function VerLanguageName Lib "Kernel32" Alias "VerLanguageNameA" (ByVal wLang As Long, ByVal szLang As String, ByVal nSize As Long) As Long
Private Const Syn_kg = " "
Private Const Syn_pzh = "\"
Public Function GetFileVerInfo(FullFileName As String) As String()
Dim rc As Long, lDummy As Long, sBuffer() As Byte
Dim lBufferLen As Long, lVerPointer As Long
Dim bytebuffer(260) As Byte
Dim Lang_Charset_String As String
Dim HexNumber As Long, Buffer As String
Dim I As Integer, strtemp As String
Dim strFileVer(5) As String
For I = 0 To 5
strFileVer(I) = ""
Next
lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy)
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 0
- 资源: 59
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Ansys Comsol实现力磁耦合仿真及其在电磁无损检测中的应用
- 西门子数控系统调试与配置实战案例教程
- ELM多输出拟合预测模型:简易Matlab实现指南
- 一维光子晶体的Comsol能带拓扑分析研究
- Borland-5技术资料压缩包分享
- Borland 6 技术资料分享包
- UE5压缩包处理技巧与D文件介绍
- 机器学习笔记:深入探讨中心极限定理
- ProE使用技巧及文件管理方法分享
- 增量式百度图片爬虫程序修复版发布
- Emlog屏蔽用户IP黑名单插件:自定义跳转与评论限制
- 安装Prometheus 2.2.1所需镜像及配置指南
- WinRARChan主题包:个性化你的压缩软件
- Neo4j关系数据映射转换测试样例集
- 安装heapster-grafana-amd64-v5-0-4所需镜像介绍
- DVB-C语言深度解析TS流