#include "string"
using namespace std;
typedef struct stFilePro
{
wstring strComments;
wstring strProductName;
wstring strInternalName;
wstring strProductVersion;
wstring strSpecialBuild;
}STFILEPRO, *pSTFILEPRO;
BOOL GetFileProperty(wchar_t* wcFilPath, STFILEPRO& stFilePro)
{
//Language code struct.
struct LANGANDCODEPAGE
{
WORD wLanguage;
WORD wCodePage;
} *TranslationPtr;
DWORD dwSize = 0;
BOOL bRet = TRUE;
BOOL bTmpRet = FALSE;
UINT uInfoSize = 0;
LPVOID infoPtr = NULL;
wchar_t* pVerInfo = NULL;
//Get version info size.
dwSize = GetFileVersionInfoSize(wcFilPath, NULL);
LPVOID pInfoData = malloc(dwSize);
if ( dwSize > 0 )
{
//Get Version info.
bTmpRet = GetFileVersionInfo(wcFilPath, NULL, dwSize, pInfoData);
if ( bTmpRet )
{
//Get language code.
bTmpRet = VerQueryValue(pInfoData, L"\\VarFileInfo\\Translation", (LPVOID*)&TranslationPtr, &uInfoSize);
if ( bTmpRet )
{
wchar_t wcCommentsInfo[100] = {0};
wchar_t wcProductNameInfo[100] = {0};
wchar_t wcProductVersionInfo[100] = {0};
wchar_t wcInternalNameInfo[100] = {0};
wchar_t wcSpecialBuildInfo[100] = {0};
//Format string.
wsprintf(wcProductNameInfo, L"\\StringFileInfo\\%04x%04x\\ProductName", TranslationPtr[0].wLanguage, TranslationPtr[0].wCodePage);
wsprintf(wcProductVersionInfo, L"\\StringFileInfo\\%04x%04x\\ProductVersion", TranslationPtr[0].wLanguage, TranslationPtr[0].wCodePage);
wsprintf(wcInternalNameInfo, L"\\StringFileInfo\\%04x%04x\\InternalName", TranslationPtr[0].wLanguage, TranslationPtr[0].wCodePage);
wsprintf(wcCommentsInfo, L"\\StringFileInfo\\%04x%04x\\Comments", TranslationPtr[0].wLanguage, TranslationPtr[0].wCodePage);
wsprintf(wcSpecialBuildInfo, L"\\StringFileInfo\\%04x%04x\\SpecialBuild", TranslationPtr[0].wLanguage, TranslationPtr[0].wCodePage);
//Get comments.
bTmpRet = VerQueryValue(pInfoData, wcCommentsInfo, (LPVOID*)&infoPtr, &uInfoSize);
if ( !bTmpRet )
{
//bRet = FALSE;
}
else
{
pVerInfo = (wchar_t*)infoPtr;
stFilePro.strComments = pVerInfo;
infoPtr = NULL;
}
//Get internalname.
bTmpRet = VerQueryValue(pInfoData, wcInternalNameInfo, (LPVOID*)&infoPtr, &uInfoSize);
if ( !bTmpRet )
{
//bRet = FALSE;
}
else
{
pVerInfo = (wchar_t*)infoPtr;
stFilePro.strInternalName = pVerInfo;
infoPtr = NULL;
}
//Get productname.
bTmpRet = VerQueryValue(pInfoData, wcProductNameInfo, (LPVOID*)&infoPtr, &uInfoSize);
if ( !bTmpRet )
{
//bRet = FALSE;
}
else
{
pVerInfo = (wchar_t*)infoPtr;
stFilePro.strProductName = pVerInfo;
infoPtr = NULL;
}
//Get productversion.
bTmpRet = VerQueryValue(pInfoData, wcProductVersionInfo, (LPVOID*)&infoPtr, &uInfoSize);
if ( !bTmpRet )
{
//bRet = FALSE;
}
else
{
pVerInfo = (wchar_t*)infoPtr;
stFilePro.strProductVersion = pVerInfo;
infoPtr = NULL;
}
//Get specialbuild.
bTmpRet = VerQueryValue(pInfoData, wcSpecialBuildInfo, (LPVOID*)&infoPtr, &uInfoSize);
if ( !bTmpRet )
{
//bRet = FALSE;
}
else
{
pVerInfo = (wchar_t*)infoPtr;
stFilePro.strSpecialBuild = pVerInfo;
infoPtr = NULL;
}
}
else
{
bRet = FALSE;
}
}
else
{
bRet = FALSE;
}
}
else
{
bRet = FALSE;
}
free(pInfoData);
pInfoData = NULL;
return bRet;
}
获得文件属性
最新推荐文章于 2022-03-11 10:50:51 发布