//文件的版本信息(大小和制造商)
struct FILEVERSION
{
DWORD dwSize;//文件大小
char szName[256];//文件的出品公司
};
/*--------------------------------------
函数描述:获取文件的大小和出品公司
输入参数:filepath 文件的路径
输出参数:pFileVersion 文件的版本结构信息(大小,出品公司)
返回值: 成功返回TRUE 否则返回FALSE;
--------------------------------------*/
BOOL GetFileCoName(char* filepath,FILEVERSION* pFileVersion)
{
if (filepath == NULL)
{
return FALSE;
}
FILEVERSION fv;
ZeroMemory(&fv,sizeof(FILEVERSION));
DWORD dwTmp = 0;
DWORD dwSize = GetFileVersionInfoSize(filepath, &dwTmp);
if( dwSize == 0 )
return FALSE;
fv.dwSize = dwSize;
BYTE* pData = new BYTE[dwSize];
// BYTE* pData = NULL;
// pData = (BYTE*)GlobalAlloc(GPTR,sizeof(BYTE));
if( pData == NULL )
return FALSE;
ZeroMemory(pData, dwSize);
if( !GetFileVersionInfo(filepath, 0, dwSize, pData) )
{
delete[] pData;
// GlobalFree(pData);
pData = NULL;
return FALSE;
}
LANGANDCODEPAGE* ppBuf = NULL;
DWORD cbSize = 0;
if( !VerQueryValue(pData,"//VarFileInfo//Translation", (void**)&ppBuf, (PUINT)&cbSize) )
{
delete[] pData;
// GlobalFree(pData);
pData = NULL;
return FALSE;
}
char* pszCoName = NULL;
for(UINT i=0; i < (cbSize/sizeof(struct LANGANDCODEPAGE)); i++ )
{
char substr[128] = {0 };
sprintf_s(substr, "//StringFileInfo//%04x%04x//CompanyName", ppBuf[i].wLanguage, ppBuf[i].wCodePage);
DWORD len = 0;
if( VerQueryValueA(pData, substr, (void**)&pszCoName, (PUINT)&len) )
{
strcpy(fv.szName,pszCoName);
}
}
delete[] pData;
// GlobalFree(pData);
pData = NULL;
*pFileVersion =fv;
return TRUE;
}