在 MFC 应用程序中,可以使用 GetFileVersionInfo 函数来获取程序版本信息。这个函数能够获取一个指定文件的版本信息,并将其存储在一个缓冲区中。然后,可以使用 VerQueryValue 函数来解析版本信息并提取所需的信息。
#include <afxver_.h>
#pragma comment(lib,"version.lib")
void GetAppVersionInfo(CString& strVersion)
{
// 获取模块文件名
CString strModuleFileName;
GetModuleFileName(AfxGetInstanceHandle(), strModuleFileName.GetBuffer(MAX_PATH), MAX_PATH);
strModuleFileName.ReleaseBuffer();
// 获取文件版本信息大小
DWORD dwHandle;
DWORD dwSize = GetFileVersionInfoSize(strModuleFileName, &dwHandle);
if (dwSize == 0)
{
strVersion = _T("Failed to get version information");
return;
}
// 分配内存存储文件版本信息
LPBYTE lpData = new BYTE[dwSize];
if (!GetFileVersionInfo(strModuleFileName, dwHandle, dwSize, lpData))
{
delete[] lpData;
strVersion = _T("Failed to get version information");
return;
}
// 解析文件版本信息
VS_FIXEDFILEINFO* pFileInfo;
UINT nFileInfoSize;
if (VerQueryValue(lpData, _T("\\"), (LPVOID*)&pFileInfo, &nFileInfoSize))
{
DWORD dwFileVersionMS = pFileInfo->dwFileVersionMS;
DWORD dwFileVersionLS = pFileInfo->dwFileVersionLS;
WORD major = HIWORD(dwFileVersionMS);
WORD minor = LOWORD(dwFileVersionMS);
WORD build = HIWORD(dwFileVersionLS);
WORD revision = LOWORD(dwFileVersionLS);
// 构建版本字符串
strVersion.Format(_T("%d.%d.%d.%d"), major, minor, build, revision);
}
else
{
strVersion = _T("Failed to get version information");
}
delete[] lpData;
}
调用 GetAppVersionInfo 函数,它将会返回一个 CString 类型的版本信息字符串。
调用
CString strVersion;
GetAppVersionInfo(strVersion);
// 现在 strVersion 中包含了程序的版本信息
这段代码会获取当前应用程序的版本信息,并存储在 strVersion 变量中。