ファイルのバージョン情報を取得するには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 作成