1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| STDMETHODIMP CTransfer::get_activexVersion(BSTR* pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
char *rcData = 0;
DWORD dwSize;
UINT wSize;
LANGANDCODEPAGE *lpTranslate;
//file name and path
CFileStatus status;
CString verInfo = "Unavailable";
//Version
LPDWORD handle1 = 0;
dwSize = ::GetFileVersionInfoSize("CTX.ocx", handle1);
rcData = new char[dwSize];
// get valid resource data using path, handle, and size
int result = ::GetFileVersionInfo("CTX.ocx", 0, dwSize, (LPVOID)rcData);
if (result)
{
result = ::VerQueryValue(rcData,TEXT("\\VarFileInfo\\Translation" ),
(LPVOID*)&lpTranslate, &wSize);
if (result == 0 || wSize == 0)
{
delete []rcData;
}
}
// Read the file description for each language and code page.
char SubBlock[100];
LPVOID lpBuffer;
for( unsigned i=0; i < (wSize/sizeof(struct LANGANDCODEPAGE)); i++ )
{
wsprintf( SubBlock,
TEXT("\\StringFileInfo\\%04x%04x\\%s"),
lpTranslate[i].wLanguage,lpTranslate[i].wCodePage,"FileVersion");
result = VerQueryValue(rcData, SubBlock, (LPVOID*)&lpBuffer, &wSize);
if (!result)
break;
verInfo = (LPCSTR)lpBuffer;
}
delete []rcData;
pVal[0] = verInfo.AllocSysString();
return S_OK;
} |
Partager