CString CAboutDlg::GetVersions()
{
#pragma comment (lib, "Version.lib")
TCHAR szFullPath[MAX_PATH];
DWORD dwVerInfoSize = 0;
DWORD dwVerHnd;
CString strVersion;
VS_FIXEDFILEINFO * pFileInfo; GetModuleFileName(NULL, szFullPath, sizeof(szFullPath));
dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd); if (dwVerInfoSize)
{
HANDLE hMem;
LPVOID lpvMem;
unsigned int uInfoSize = 0; hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem = GlobalLock(hMem);
GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem);
if(::VerQueryValue(lpvMem, (LPTSTR)_T("//"), (void**)&pFileInfo, &uInfoSize))
{
WORD m_nProdVersion[4]; m_nProdVersion[0] = HIWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[1] = LOWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[2] = HIWORD(pFileInfo->dwProductVersionLS);
m_nProdVersion[3] = LOWORD(pFileInfo->dwProductVersionLS);
strVersion.Format(_T("%d.%d.%d.%d"),m_nProdVersion[0],
m_nProdVersion[1],m_nProdVersion[2],m_nProdVersion[3]);
}
}
return strVersion;
}红色的地方 执行失败了,我想问问GetFileVersionInfo的第一个参数地址是什么地址呢?执行的EXE是嘛?然后他从哪里找到的版本信息呢?
{
#pragma comment (lib, "Version.lib")
TCHAR szFullPath[MAX_PATH];
DWORD dwVerInfoSize = 0;
DWORD dwVerHnd;
CString strVersion;
VS_FIXEDFILEINFO * pFileInfo; GetModuleFileName(NULL, szFullPath, sizeof(szFullPath));
dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd); if (dwVerInfoSize)
{
HANDLE hMem;
LPVOID lpvMem;
unsigned int uInfoSize = 0; hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem = GlobalLock(hMem);
GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem);
if(::VerQueryValue(lpvMem, (LPTSTR)_T("//"), (void**)&pFileInfo, &uInfoSize))
{
WORD m_nProdVersion[4]; m_nProdVersion[0] = HIWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[1] = LOWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[2] = HIWORD(pFileInfo->dwProductVersionLS);
m_nProdVersion[3] = LOWORD(pFileInfo->dwProductVersionLS);
strVersion.Format(_T("%d.%d.%d.%d"),m_nProdVersion[0],
m_nProdVersion[1],m_nProdVersion[2],m_nProdVersion[3]);
}
}
return strVersion;
}红色的地方 执行失败了,我想问问GetFileVersionInfo的第一个参数地址是什么地址呢?执行的EXE是嘛?然后他从哪里找到的版本信息呢?
TCHAR* szFileName;
DWORD dwSize = GetFileVersionInfoSize((LPCWSTR)szFileName,NULL);
DWORD a = GetLastError();
LPVOID pBlock = malloc(dwSize);
GetFileVersionInfo((LPCWSTR)szFileName,0,dwSize,pBlock); char* pVerValue = NULL;
UINT nSize = 0;
VerQueryValue(pBlock,TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&pVerValue,&nSize); CString strSubBlock,strTranslation,strTemp;
strTemp.Format(L"000%x",*((unsigned short int *)pVerValue));
strTranslation = strTemp.Right(4);
strTemp.Format(L"000%x",*((unsigned short int *)&pVerValue[2]));
strTranslation += strTemp.Right(4);
//080404b0为中文,040904E4为英文 strSubBlock.Format(L"\\StringFileInfo\\%s\\ProductVersion",strTranslation);
VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
strSubBlock.ReleaseBuffer();
strTemp.Format(L"产品版本: %s",pVerValue);
AfxMessageBox(strTemp);
LPTSTR lpSubBlock,
LPVOID *lplpBuffer,
PUINT puLen
);
pBlock
[in] Pointer to the buffer containing the version-information resource returned by the GetFileVersionInfo function. if (VerQueryValue(szVersionBuffer, _T("\\"), (void**)&pInfo, &nInfoLen))
{
//Add Code
}