⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modulver.cpp

📁 一个完整的数字硬盘录像机系统软件
💻 CPP
字号:
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
#include "StdAfx.h"
#include "ModulVer.h"
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
CModuleVersion::CModuleVersion()
{
	m_pVersionInfo = NULL;
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
CModuleVersion::~CModuleVersion()
{
	delete [] m_pVersionInfo;
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
BOOL CModuleVersion::GetFileVersionInfo(LPCTSTR modulename)
{
	m_translation.charset = 1252;
	memset((VS_FIXEDFILEINFO*)this, 0, sizeof(VS_FIXEDFILEINFO));
	CLoadLibrary lib(modulename);
	TCHAR filename[_MAX_PATH];
	HMODULE hModule = ::GetModuleHandle(modulename);
	if (hModule==NULL && modulename!=NULL) 
		return FALSE;
	DWORD len = GetModuleFileName(hModule, filename,sizeof(filename)/sizeof(filename[0]));
	if (len <= 0)
		return FALSE;
	DWORD dwDummyHandle;
	len = GetFileVersionInfoSize(filename, &dwDummyHandle);
	if (len <= 0)
		return FALSE;
	if (m_pVersionInfo)
		delete m_pVersionInfo;
	m_pVersionInfo = new BYTE[len];
	if (!::GetFileVersionInfo(filename, 0, len, m_pVersionInfo))
		return FALSE;
	LPVOID lpvi;
	UINT iLen;
	if (!VerQueryValue(m_pVersionInfo, _T("\\"), &lpvi, &iLen))
		return FALSE;
	*(VS_FIXEDFILEINFO*)this = *(VS_FIXEDFILEINFO*)lpvi;
	if (VerQueryValue(m_pVersionInfo,_T("\\VarFileInfo\\Translation"), &lpvi, &iLen) && iLen >= 4)
	{
		m_translation = *(TRANSLATION*)lpvi;
		TRACE(_T("code page = %d\n"), m_translation.charset);
	}
	return dwSignature == VS_FFI_SIGNATURE;
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
CString CModuleVersion::GetValue(LPCTSTR lpKeyName)
{
	CString sVal;
	if (m_pVersionInfo) 
	{
		CString query;
		query.Format(_T("\\StringFileInfo\\%04x%04x\\%s"),
			m_translation.langID,
			m_translation.charset,
			lpKeyName);
		LPCTSTR pVal;
		UINT iLenVal;
		if (VerQueryValue(m_pVersionInfo, (LPTSTR)(LPCTSTR)query,
				(LPVOID*)&pVal, &iLenVal)) 
		{
			sVal = pVal;
		}
	}
	return sVal;
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
typedef HRESULT (CALLBACK* DLLGETVERSIONPROC)(DLLVERSIONINFO *);
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
BOOL CModuleVersion::DllGetVersion(LPCTSTR modulename, DLLVERSIONINFO& dvi)
{
	CLoadLibrary lib(modulename);
	if (!lib)
		return FALSE;
	DLLGETVERSIONPROC pDllGetVersion =
		(DLLGETVERSIONPROC)GetProcAddress(lib, _T("DllGetVersion"));
	if (!pDllGetVersion)
		return FALSE;
	memset(&dvi, 0, sizeof(dvi));
	dvi.cbSize = sizeof(dvi);
	return SUCCEEDED((*pDllGetVersion)(&dvi));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -