资源简介
通过代码获得程序资源中VS_VERSION_INFO所有信息。
代码片段和文件信息
#include “ModuleVersion.h“
#pragma comment(lib “Version.lib“)
#pragma comment(lib “crypt32.lib“)
CModuleVersion::CModuleVersion(void)
: m_pVersionInfo(NULL)
{
}
//
CModuleVersion::CModuleVersion(TRANSLATION langAndCode)
: m_pVersionInfo(NULL)
{
m_translation = langAndCode;
}
//
CModuleVersion::~CModuleVersion(void)
{
if (m_pVersionInfo)
{
delete [] m_pVersionInfo;
m_pVersionInfo = NULL;
}
}
//////////////////
// Get file version info for a given module
// Allocates storage for all info fills “this“ with
// VS_FIXEDFILEINFO and sets codepage.
//
bool CModuleVersion::GetFileVersionInfo(const wchar_t* szModuleName)
{
bool bRet = false;
m_translation.charset = 1252; // default = ANSI code page
memset((VS_FIXEDFILEINFO*)this 0 sizeof(VS_FIXEDFILEINFO));
// get module handle
TCHAR filename[_MAX_PATH];
HMODULE hModule = ::GetModuleHandle(szModuleName);
if (hModule==NULL && szModuleName!=NULL)
return false;
// get module file name
DWORD len = GetModuleFileName(hModule filename sizeof(filename)/sizeof(filename[0]));
if (len <= 0)
return false;
// read file version info
DWORD dwDummyHandle; // will always be set to zero
len = GetFileVersionInfoSize(filename &dwDummyHandle);
if (len <= 0)
return false;
m_pVersionInfo = new BYTE[len]; // allocate version info
if (!::GetFileVersionInfo(filename 0 len m_pVersionInfo))
return false;
LPVOID lpvi;
UINT iLen;
if (!VerQueryValue(m_pVersionInfo _T(“\\“) &lpvi &iLen))
return false;
// copy fixed info to myself which am derived from VS_FIXEDFILEINFO
*(VS_FIXEDFILEINFO*)this = *(VS_FIXEDFILEINFO*)lpvi;
// Get translation info
if (VerQueryValue(m_pVersionInfo _T(“\\VarFileInfo\\Translation“) &lpvi &iLen) && iLen >= 4)
{
m_translation = *(TRANSLATION*)lpvi;
//TRACE(L“code page = %d\n“ m_translation.charset);
}
bRet = dwSignature == VS_FFI_SIGNATURE;
return bRet;
}
//
std::wstring CModuleVersion::GetValue(const wchar_t* szName)
{
std::wstring szRet;
if (m_pVersionInfo)
{
wchar_t strSubBlock[256];
swprintf(strSubBlock
256
L“\\StringFileInfo\\%04x%04x\\%s“
m_translation.langID
m_translation.charset
szName);
LPVOID lpBuffer = NULL;
UINT uLen = 0;
BOOL br = ::VerQueryValueW(m_pVersionInfo strSubBlock &lpBuffer &uLen);
if (br == 0)
{
return L““;
}
szRet = (const wchar_t*)lpBuffer;
}
return szRet;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2496 2016-06-15 17:21 ModuleVersionMFC\ModuleVersionMFC\ModuleVersion.cpp
文件 1597 2016-06-15 17:21 ModuleVersionMFC\ModuleVersionMFC\ModuleVersion.h
文件 106144 2016-06-15 17:40 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFC.aps
文件 1366 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFC.cpp
文件 505 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFC.h
文件 6119 2016-06-15 17:40 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFC.rc
文件 5875 2016-06-15 17:38 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFC.vcproj
文件 4128 2016-06-15 17:38 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFCDlg.cpp
文件 608 2016-06-15 17:30 ModuleVersionMFC\ModuleVersionMFC\ModuleVersionMFCDlg.h
文件 2425 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\ReadMe.txt
....... 67777 2007-11-28 16:21 ModuleVersionMFC\ModuleVersionMFC\res\ModuleVersionMFC.ico
文件 372 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\res\ModuleVersionMFC.rc2
文件 1148 2016-06-15 17:35 ModuleVersionMFC\ModuleVersionMFC\resource.h
文件 149 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\stdafx.cpp
文件 910 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\stdafx.h
文件 1030 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\targetver.h
文件 914 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC.sln
目录 0 2016-06-15 17:28 ModuleVersionMFC\ModuleVersionMFC\res
目录 0 2016-06-15 17:41 ModuleVersionMFC\ModuleVersionMFC
目录 0 2016-06-15 17:41 ModuleVersionMFC
----------- --------- ---------- ----- ----
203563 20
- 上一篇:维吉尼亚密码的简单实现
- 下一篇:系统循环码C语言实现
评论
共有 条评论