MFC 获取程序版本信息

在 MFC 应用程序中,可以使用 GetFileVersionInfo 函数来获取程序版本信息。这个函数能够获取一个指定文件的版本信息,并将其存储在一个缓冲区中。然后,可以使用 VerQueryValue 函数来解析版本信息并提取所需的信息。

javascript 复制代码
#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 类型的版本信息字符串。

调用

javascript 复制代码
CString strVersion;
GetAppVersionInfo(strVersion);
// 现在 strVersion 中包含了程序的版本信息
这段代码会获取当前应用程序的版本信息,并存储在 strVersion 变量中。
相关推荐
夏霞6 小时前
c# signlar 客户端传递参数给服务端配置方法
开发语言·c#
武藤一雄6 小时前
从零构建C# OOP 知识体系
windows·microsoft·c#·.net·.netcore·oop
2301_818419016 小时前
C++中的解释器模式变体
开发语言·c++·算法
爱学习的大牛1236 小时前
windows tcpview 类似功能 c++
c++
唐青枫6 小时前
C#.NET ConcurrentStack<T> 深入解析:无锁栈原理、LIFO 语义与使用边界
c#·.net
biter down7 小时前
C++11 统一列表初始化+std::initializer_list
开发语言·c++
ShineWinsu8 小时前
爬虫对抗:ZLibrary反爬机制实战分析技术文章大纲
c++
aini_lovee9 小时前
C# 实现邮件发送源码(支持附件)
开发语言·javascript·c#
charlie1145141919 小时前
通用GUI编程技术——Win32 原生编程实战(十六)——Visual Studio 资源编辑器使用指南
开发语言·c++·ide·学习·gui·visual studio·win32
DpHard9 小时前
现代 C++ 中 push 接口为何提供 const T& 与 T&& 两个重载
c++