ファイルのバージョン情報を取得するにはVersion関数群を使用します。
バージョン情報とはファイルのプロパティのバージョン情報タブで参照できる情報のことです。
ファイルバージョン、説明、著作権などの情報が格納されています。
GetFileVersionInfo関数を呼び出し、バージョン情報ハンドルを取り出し、この中から、VerQueryValueを使用してルートの情報(VS_FIXEDFILEINFO)を取り出します。
VS_FIXEDFILEINFOのdwFileVersionMSとdwFileVersionLSメンバがバージョン情報です。
通常、バージョン番号は1.2.3.4という形式なので、それぞれをハイワードと、ローワードに分ければ、OKです。
以下は、サンプルです。
----
#pragma comment(lib, "version.lib")
/* #GetFileVersion---ファイルバージョンを取り出す */
bool GetFileVersion(LPCTSTR lpszFileName,
LPWORD lpwVerVal1, LPWORD lpwVerVal2,
LPWORD lpwVerVal3, LPWORD lpwVerVal4)
{
bool fResult = false;
int len = _tcslen(lpszFileName);
LPTSTR lpszPath = new TCHAR[sizeof(TCHAR)*(len+1)];
_tcscpy(lpszPath, lpszFileName);
DWORD dwVerHnd;
DWORD dwVerInfoSize;
dwVerInfoSize = GetFileVersionInfoSize(lpszPath, &dwVerHnd);
if (dwVerInfoSize > 0) {
HANDLE hMem;
LPVOID lpvMem;
hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem = GlobalLock(hMem);
if (GetFileVersionInfo(lpszPath, dwVerHnd, dwVerInfoSize, lpvMem)) {
VS_FIXEDFILEINFO* pFileInfo;
UINT nSize = 0;
BOOL bRet = VerQueryValue(lpvMem, _TEXT("\\"), (LPVOID*)&pFileInfo, &nSize);
fResult = bRet?true:false;
*lpwVerVal1 = HIWORD(pFileInfo->dwFileVersionMS);
*lpwVerVal2 = LOWORD(pFileInfo->dwFileVersionMS);
*lpwVerVal3 = HIWORD(pFileInfo->dwFileVersionLS);
*lpwVerVal4 = LOWORD(pFileInfo->dwFileVersionLS);
}
GlobalUnlock(hMem);
GlobalFree(hMem);
}
delete lpszPath;
return fResult;
}
------
更新履歴
・2000/8/23 HIWORD,LOWORDマクロを使用するようにした。
・2000/8/18 作成