DWORD CDllExDlg::SHGetVersionOfFile(LPTSTR szFile, LPTSTR szBuf, LPINT lpiBuf, int iNumOfFields)
{
DWORD dwUseless =0 ;
UINT iBufSize = 0;
VS_FIXEDFILEINFO* lpFFI=NULL;
TCHAR s[MAX_PATH] = {0};
DWORD dwLen = GetFileVersionInfoSize(szFile, &dwUseless);
if(dwLen==0)
{
if(szBuf)
lstrcpy(szBuf, _TEXT("<unknown>"));
return 0;
}
HGLOBAL lpVI = GlobalAlloc(GHND, dwLen);
LPVOID lpvMem = GlobalLock(lpVI);
::GetFileVersionInfo(szFile, NULL, dwLen, lpvMem);
VerQueryValue(lpvMem, _TEXT("\\"),reinterpret_cast<LPVOID*>(&lpFFI), &iBufSize);
DWORD dwVer1 = lpFFI->dwFileVersionMS;
DWORD dwVer2 = lpFFI->dwFileVersionLS;
GlobalUnlock(lpVI);
GlobalFree(lpVI);
//Fill return buffers
if(szBuf!=NULL)
{
wsprintf(s, _TEXT("%d.%d.%d.%d"), HIWORD(dwVer1), LOWORD(dwVer1),HIWORD(dwVer2),LOWORD(dwVer2));
lstrcpy(szBuf, s);
}
if(lpiBuf != NULL)
{
for(int i=0; i<iNumOfFields; i++)
{
if(i==0)
lpiBuf[i] = HIWORD(dwVer1);
if(i==1)
lpiBuf[i] = LOWORD(dwVer1);
if(i==2)
lpiBuf[i] = HIWORD(dwVer2);
if(i==3)
lpiBuf[i] = LOWORD(dwVer2);
}
}
return dwVer1;
}
'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글
RichEditCtrl, RichEdit 사용해보자 (0) | 2014.01.17 |
---|---|
CreateThread 만들어보자 (0) | 2014.01.17 |
동적 라이브러리 연결시 GetProcAddress로 한번에 연결하기 (0) | 2014.01.17 |
JPG resouce 등록하고 사용하기 (0) | 2014.01.17 |
VC++ PG_SEND (0) | 2014.01.17 |