封装类之FileVersion(获取文件属性)
来源:互联网 发布:linux 文件系统 编辑:程序博客网 时间:2024/05/21 22:39
应用此类可以获取应用程序的程序名,产品名称,公司名称,版本号,版权等信息
1XX.h文件
class CFileVersion { // Construction public: CFileVersion(); // Operations public: BOOL Open(LPCTSTR lpszModuleName); void Close(); CString QueryValue(LPCTSTR lpszValueName, DWORD dwLangCharset = 0); CString GetFileDescription() {return QueryValue(_T("FileDescription")); }; CString GetFileVersion() {return QueryValue(_T("FileVersion")); }; CString GetInternalName() {return QueryValue(_T("InternalName")); }; CString GetCompanyName() {return QueryValue(_T("CompanyName")); }; CString GetLegalCopyright() {return QueryValue(_T("LegalCopyright")); }; CString GetOriginalFilename() {return QueryValue(_T("OriginalFilename"));}; CString GetProductName() {return QueryValue(_T("ProductName")); }; CString GetProductVersion() {return QueryValue(_T("ProductVersion")); }; BOOL GetFixedInfo(VS_FIXEDFILEINFO& vsffi); CString GetFixedFileVersion(); CString GetFixedProductVersion(); // Attributes protected: LPBYTE m_lpVersionData; DWORD m_dwLangCharset; // Implementation public: ~CFileVersion(); };
2XX.cpp文件
//构造函数初始化CFileVersion::CFileVersion() { m_lpVersionData = NULL; m_dwLangCharset = 0; } //析构函数 退出释放资源CFileVersion::~CFileVersion() { Close(); } void CFileVersion::Close() { delete[] m_lpVersionData; m_lpVersionData = NULL; m_dwLangCharset = 0; } //打开版本信息文件,获取文件属性的翻译表获取语言编码BOOL CFileVersion::Open(LPCTSTR lpszModuleName) { ASSERT(_tcslen(lpszModuleName) > 0); ASSERT(m_lpVersionData == NULL); // Get the version information size for allocate the buffer DWORD dwHandle; DWORD dwDataSize = GetFileVersionInfoSize((LPTSTR)lpszModuleName, &dwHandle); if ( dwDataSize == 0 ) return FALSE; // Allocate buffer and retrieve version information m_lpVersionData = new BYTE[dwDataSize]; if (!GetFileVersionInfo((LPTSTR)lpszModuleName, dwHandle, dwDataSize, (void**)m_lpVersionData) ) { Close(); return FALSE; } // Retrieve the first language and character-set identifier UINT nQuerySize; DWORD* pTransTable; if (!VerQueryValue(m_lpVersionData, _T("\\VarFileInfo\\Translation"), (void **)&pTransTable, &nQuerySize) ) { Close(); return FALSE; } // Swap the words to have lang-charset in the correct format m_dwLangCharset = MAKELONG(HIWORD(pTransTable[0]), LOWORD(pTransTable[0])); return TRUE; } //获指定文件属性信息 "\StringFileInfo\languagecodepage\stringname"CString CFileVersion::QueryValue(LPCTSTR lpszValueName, DWORD dwLangCharset /* = 0*/) { // Must call Open() first ASSERT(m_lpVersionData != NULL); if ( m_lpVersionData == NULL ) return (CString)_T(""); // If no lang-charset specified use default if ( dwLangCharset == 0 ) dwLangCharset = m_dwLangCharset; // Query version information value UINT nQuerySize; LPVOID lpData; CString strValue, strBlockName; strBlockName.Format(_T("\\StringFileInfo\\%08lx\\%s"), dwLangCharset, lpszValueName); if ( VerQueryValue((void **)m_lpVersionData, strBlockName.GetBuffer(0), &lpData, &nQuerySize) ) strValue = (LPCTSTR)lpData; strBlockName.ReleaseBuffer(); return strValue; } //获取文件的版本信息 VS_FIXEDFILEINFO包含文件的版本信息BOOL CFileVersion::GetFixedInfo(VS_FIXEDFILEINFO& vsffi) { // Must call Open() first ASSERT(m_lpVersionData != NULL); if ( m_lpVersionData == NULL ) return FALSE; UINT nQuerySize; VS_FIXEDFILEINFO* pVsffi; if ( VerQueryValue((void **)m_lpVersionData, _T("\\"), (void**)&pVsffi, &nQuerySize) ) { vsffi = *pVsffi; return TRUE; } return FALSE; } //获取文件的版本信息CString CFileVersion::GetFixedFileVersion() { CString strVersion; VS_FIXEDFILEINFO vsffi; if ( GetFixedInfo(vsffi) ) { strVersion.Format (_T("%u,%u,%u,%u"),HIWORD(vsffi.dwFileVersionMS), LOWORD(vsffi.dwFileVersionMS), HIWORD(vsffi.dwFileVersionLS), LOWORD(vsffi.dwFileVersionLS)); } return strVersion; } //获取产品的版本信息CString CFileVersion::GetFixedProductVersion() { CString strVersion; VS_FIXEDFILEINFO vsffi; if ( GetFixedInfo(vsffi) ) { strVersion.Format (_T("%u,%u,%u,%u"), HIWORD(vsffi.dwProductVersionMS), LOWORD(vsffi.dwProductVersionMS), HIWORD(vsffi.dwProductVersionLS), LOWORD(vsffi.dwProductVersionLS)); } return strVersion; }
3在使用的过程中实例化一个对象,调用相关的函数即可
在这里可以查到相关的文件属性信息,也可以在里面修改文件信息
0 0
- 封装类之FileVersion(获取文件属性)
- python获取文件属性(转)
- spring 之 PropertiesLoaderUtils 获取文件属性用法
- ios开发之获取修改文件属性
- 获取文件属性
- 获取文件属性
- 获取文件属性
- 获取文件属性
- 文件属性获取
- IOS获取文件属性。(包括创建日期)
- 【PyQt4 实例23】获取文件属性(上)
- 【PyQt4 实例23】获取文件属性(下)
- UWP入门(十)--获取文件属性
- Java基础知识之文件操作(三)——NIO获取文件属性
- [Python]获取文件属性
- C#获取文件属性
- wince下获取文件属性
- c# 获取文件属性
- (素材源码) 猫猫学iOS 之UIDynamic重力、弹性碰撞吸附等现象PS有惊喜
- 最小二乘平差之附有限制条件的间接平差
- 轻松python文本专题-字符与字符值转换
- 函数strstr,strcasestr
- C++笔试总结-面试笔试常考题型(一)指针-引用-宏定义-sizeof
- 封装类之FileVersion(获取文件属性)
- ORACLE-016:ora-01720 授权选项对于'xxxx'不存在
- 数据解析XML,JSON
- 数组的逆序+归并+树状数组+快排
- 【编程之美】寻找数组中的最大值和最小值
- 【一步一步的积累】Auto-context and Its Application to High-level Vision Tasks
- POJ 3176 Cow Bowling(DP 数字三角形)
- 多进程共享动态链接库的原理
- android学习之——Android事件处理(监听和回调)