#include "tchar.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(lib, "version.lib")
//hMod:DLL或者EXE实例句柄,hMod为0表示当前执行体
//pVerString:用来返回版本字符串,
//iStringLength:pVerString的最大字符数量
//返回:成功返回版本字符串的字符数,失败返回-1
int GetModuleVersion(HMODULE hMod, TCHAR *pVerString, int iStringLength)
{
TCHAR tFileName[256];
int iSize, iRet;
char *pCharMid;
VS_FIXEDFILEINFO *pFileInfo;
unsigned int uiInfoFileInfo;
TCHAR VersionMid[32];
::GetModuleFileName(hMod, tFileName, 255);
iSize = ::GetFileVersionInfoSize(tFileName, 0);
if(iSize <= 0)
{
return -1;
}
pCharMid = new char[iSize];
::GetFileVersionInfo(tFileName, 0, iSize, (void*)pCharMid);
::VerQueryValue((void*)pCharMid, _T("//"), (void**)(&pFileInfo), &uiInfoFileInfo);
_stprintf(VersionMid, _T("%d.%d.%d.%d"), /
HIWORD(pFileInfo->dwProductVersionMS), /
LOWORD(pFileInfo->dwProductVersionMS), /
HIWORD(pFileInfo->dwProductVersionLS), /
LOWORD(pFileInfo->dwProductVersionLS));
iRet = _tcslen(VersionMid);
delete []pCharMid;
if((pVerString != 0) && (iStringLength > 0))
{
_tcsncpy(pVerString, VersionMid, iStringLength - 1);
pVerString[iStringLength - 1] = 0;
}
return iRet;
}