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 变量中。
相关推荐
bkspiderx41 分钟前
C++变量生命周期:从创建到销毁的完整旅程
c++·生命周期·作用域·变量生命周期
huluang2 小时前
Word文档批注智能克隆系统的设计与实现
开发语言·c#·word
T0uken2 小时前
现代 C++ 项目的 CMake 工程组织
c++
H CHY2 小时前
C++代码
c语言·开发语言·数据结构·c++·算法·青少年编程
xiaolang_8616_wjl2 小时前
c++题目_传桶(改编于atcoder(题目:Heavy Buckets))
数据结构·c++·算法
kylezhao20192 小时前
C#上位机开发数据持久化:excel报表导入导出
开发语言·c#·excel
小小8程序员3 小时前
除了 gcc/g++,还有哪些常用的 C/C++ 编译器?
c语言·开发语言·c++
希望_睿智3 小时前
实战设计模式之中介者模式
c++·设计模式·架构
博语小屋5 小时前
转义字符.
c语言·c++
Lhan.zzZ5 小时前
Qt跨线程网络通信:QSocketNotifier警告及解决
开发语言·c++·qt