#include <atlstr.h>
#pragma comment(lib, "version.lib")
struct EXE_FILE_INFO
{
CString CompanyName;
CString FileDescription;
CString FileVersion;
CString InternalName;
CString LegalCopyright;
CString OriginalFilename;
CString ProductName;
CString ProductVersion;
// no means...
CString Comments;
CString LegalTrademarks;
CString PrivateBuild;
CString SpecialBuild;
};
BOOL GetExeFileInfo(EXE_FILE_INFO& fileInfo, CString exePath)
{
DWORD dwLen = 0;
char* lpData = NULL;
dwLen = GetFileVersionInfoSize(exePath, 0);
if (0 == dwLen) return FALSE;
lpData = new char[dwLen+1];
if(!GetFileVersionInfo(exePath, 0, dwLen, lpData))
{
delete lpData;
return FALSE;
}
LPVOID lpBuffer = NULL;
UINT uLen = 0;
CString subBlock;
subBlock.Format(_T("\\StringFileInfo\\%s04b0\\"), _T("0804")); // 0409英文,0804中文
BOOL b1 = VerQueryValue(lpData, subBlock + _T("CompanyName"), &lpBuffer, &uLen);
fileInfo.CompanyName = (TCHAR*)lpBuffer;
BOOL b2 = VerQueryValue(lpData, subBlock + _T("FileDescription"), &lpBuffer, &uLen);
fileInfo.FileDescription = (TCHAR*)lpBuffer;
BOOL b3 = VerQueryValue(lpData, subBlock + _T("FileVersion"), &lpBuffer, &uLen);
fileInfo.FileVersion = (TCHAR*)lpBuffer;
BOOL b4 = VerQueryValue(lpData, subBlock + _T("InternalName"), &lpBuffer, &uLen);
fileInfo.InternalName = (TCHAR*)lpBuffer;
BOOL b5 = VerQueryValue(lpData, subBlock + _T("LegalCopyright"), &lpBuffer, &uLen);
fileInfo.LegalCopyright = (TCHAR*)lpBuffer;
BOOL b6 = VerQueryValue(lpData, subBlock + _T("OriginalFilename"), &lpBuffer, &uLen);
fileInfo.OriginalFilename = (TCHAR*)lpBuffer;
BOOL b7 = VerQueryValue(lpData, subBlock + _T("ProductName"), &lpBuffer, &uLen);
fileInfo.ProductName = (TCHAR*)lpBuffer;
BOOL b8 = VerQueryValue(lpData, subBlock + _T("ProductVersion"), &lpBuffer, &uLen);
fileInfo.ProductVersion = (TCHAR*)lpBuffer;
// no means...
BOOL b9 = VerQueryValue(lpData, subBlock + _T("Comments"), &lpBuffer, &uLen);
fileInfo.Comments = (TCHAR*)lpBuffer;
BOOL b10 = VerQueryValue(lpData, subBlock + _T("LegalTrademarks"), &lpBuffer, &uLen);
fileInfo.LegalTrademarks = (TCHAR*)lpBuffer;
BOOL b11 = VerQueryValue(lpData, subBlock + _T("PrivateBuild"), &lpBuffer, &uLen);
fileInfo.PrivateBuild = (TCHAR*)lpBuffer;
BOOL b12 = VerQueryValue(lpData, subBlock + _T("SpecialBuild"), &lpBuffer, &uLen);
fileInfo.SpecialBuild = (TCHAR*)lpBuffer;
if (!b1)
{
return FALSE;
}
delete [] lpData;
return TRUE;
}
LPCTSTR GetExePath(void)
{
// 获取主程序所在路径, 存在path中
TCHAR path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);
return CString(path);
}
int main(void)
{
EXE_FILE_INFO fileInfo;
GetExeFileInfo(fileInfo, _T("D:\\000\\桌面\\SnapShot.exe"));
return 0;
}
获取exe文件信息
最新推荐文章于 2023-06-16 00:27:33 发布