获取EXE版本信息 GetFileVersionInfo

需要三个函数配合GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue。


1.  前两个函数的使用,为VerQueryValue做准备

	DWORD dwInfoSize, dwHandle;
	dwInfoSize = ::GetFileVersionInfoSize(m_szAppFilePath, &dwHandle);
	if(dwInfoSize <= 0)
		ASSERT(FALSE);

	BYTE* pData = new BYTE[dwInfoSize];

	VERIFY(::GetFileVersionInfo(m_szAppFilePath, NULL,
		dwInfoSize, (LPVOID)pData));
2. 获取主次版本号

	VERIFY(::VerQueryValue((LPCVOID)pData, _T("\\"), &lpBuffer, &uLength));

	m_dwProductVersionMS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionMS;
	m_dwProductVersionLS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionLS;

3. 获取版权信息

	VERIFY(::VerQueryValue((LPCVOID)pData,
		_T("\\StringFileInfo\\080404b0\\LegalCopyright"),
		&lpBuffer, &uLength));
	CString szCopyright((LPCTSTR)lpBuffer, (int)uLength);

4. 获取产品名称

	VERIFY(::VerQueryValue((LPCVOID)pData,
		_T("\\StringFileInfo\\080404b0\\ProductName"),
		&lpBuffer, &uLength));
	CString szProductName((LPCTSTR)lpBuffer, (int)uLength);

5. 获取公司名称

	VERIFY(::VerQueryValue((LPCVOID)pData,
		_T("\\StringFileInfo\\080404b0\\CompanyName"),
		&lpBuffer, &uLength));
	CString szManufacture((LPCTSTR)lpBuffer, (int)uLength);

6.下面为系统性的解释

查询什么主要有VerQueryValue的第二个参数来控制,它的取值如下:

"\" 获取文件的VS_FIXEDFILEINFO结构
"\VarFileInfo\Translation" 获取文件的翻译表
"\StringFileInfo\languagecodepage\stringname" 获取文件的字串信息,languagecodepage指的是语言代码页【080404b0为中文,040904E4为英文】。



在VB6 (Visual Basic 6) 中,获取EXE文件的版本号通常通过读取资源中的相关信息或者使用系统API函数。一种常见的方法是利用Win32 API函数GetFileVersionInfo和VerQueryValue来提取文件的详细信息,包括版本号。 首先,你需要打开一个进程句柄,并定位到你要检查的EXE文件的模块部分。然后你可以这样做: ```vb Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Private Declare Function GetFileVersionInfo Lib "kernel32" (ByVal hModule As Long, ByVal szFileName As String, ByVal dwLen As Long, ByVal lpVersionInfo As Any) As Long Private Declare Function VerQueryValue Lib "version.dll" (ByVal pvVersionInfo As Any, ByVal szSubBlock As String, lpData As Any, lpdwSize As Long) As Long Function GetExeVersionInfo(ByVal filePath As String) As String Dim hModule As Long Dim versionInfo As Any Dim versionBlock As String Dim size As Long Dim strVersion As String ' 获取模块句柄 hModule = GetModuleHandle(filePath) ' 获取文件版本信息 If Not GetFileVersionInfo(hModule, filePath, 0, versionInfo) Then GetExeVersionInfo = "无法获取版本信息" Exit Function End If ' 定位到版本信息versionBlock = "\VarFileInfo\Translation" If Not VerQueryValue(versionInfo, versionBlock, versionInfo, size) Then GetExeVersionInfo = "无法找到版本块" Exit Function End If ' 从版本信息中解析版本号 strVersion = "" Call VerQueryValue(versionInfo, "ProductVersion", strVersion, 0) ' 假设ProductVersion存储了版本号 GetExeVersionInfo = strVersion End Function ``` 这个函数会尝试返回指定EXE文件的ProductVersion(通常版本号格式如"X.X.X.X")。如果遇到错误,它会返回相应的错误消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值