【VC++】リソース情報からバージョン情報を取得する
<機能>
リソース情報からバージョン情報を取得してメッセージボックスで出力します
<使い方>
構成プロパティ > 全般 > 文字セット で「マルチバイト文字セットを使用する」を選択
関数はそのまま呼び出してください
メッセージボックスにてバージョン情報が表示されます
<イメージ>
void GetVersionInfo()
{
#pragma comment(lib, "version.lib")
const int MAX_LEN = 2048;
CString csMsg;
CString csBuf;
UINT uDmy;
struct LANGANDCODEPAGE {
WORD wLanguage; //日本語(0411)、英語(0409)
WORD wCodePage;
} *lpTran;
{
#pragma comment(lib, "version.lib")
const int MAX_LEN = 2048;
CString csMsg;
CString csBuf;
UINT uDmy;
struct LANGANDCODEPAGE {
WORD wLanguage; //日本語(0411)、英語(0409)
WORD wCodePage;
} *lpTran;
LPTSTR pBuf = csBuf.GetBuffer(MAX_LEN + 1);
::GetModuleFileName(NULL, pBuf, MAX_LEN + 1);
DWORD dwZero = 0;
DWORD dwVerInfoSize = GetFileVersionInfoSize(pBuf, &dwZero);
::GetModuleFileName(NULL, pBuf, MAX_LEN + 1);
DWORD dwZero = 0;
DWORD dwVerInfoSize = GetFileVersionInfoSize(pBuf, &dwZero);
unsigned char *pBlock = NULL;
pBlock = new unsigned char[dwVerInfoSize];
::GetFileVersionInfo(pBuf, 0, dwVerInfoSize, pBlock);
::VerQueryValue(pBlock, "¥¥VarFileInfo¥¥Translation", (LPVOID*)&lpTran, &uDmy);
pBlock = new unsigned char[dwVerInfoSize];
::GetFileVersionInfo(pBuf, 0, dwVerInfoSize, pBlock);
::VerQueryValue(pBlock, "¥¥VarFileInfo¥¥Translation", (LPVOID*)&lpTran, &uDmy);
//バージョンを取得するためのバッファ
char name[256];
void *pVer;
char name[256];
void *pVer;
//ファイルの説明(FileDescription)
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥FileDescription", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("ファイルの説明 [%s]", pVer);
csMsg = csBuf;
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥FileDescription", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("ファイルの説明 [%s]", pVer);
csMsg = csBuf;
//ファイルバージョン(FileVersion)
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥FileVersion", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("ファイルバージョン [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥FileVersion", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("ファイルバージョン [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
//製品名(ProductName)
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥ProductName", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("製品名 [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥ProductName", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("製品名 [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
//製品バージョン(ProductVersion)
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥ProductVersion", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("プロダクトバージョン[%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥ProductVersion", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("プロダクトバージョン[%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
//著作権(LegalCopyright)
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥LegalCopyright", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("著作権 [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥LegalCopyright", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("著作権 [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
//会社名(CompanyName)
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥CompanyName", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("会社名 [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
wsprintf(name, "¥¥StringFileInfo¥¥%04x%04x¥¥CompanyName", lpTran[0].wLanguage, lpTran[0].wCodePage);
::VerQueryValue(pBlock, name, &pVer, &uDmy);
csBuf.Format("会社名 [%s]", pVer);
csMsg += ("¥r¥n" + csBuf);
//メッセージボックスで結果表示
AfxMessageBox(csMsg, MB_ICONINFORMATION);
delete[] pBlock;
}
AfxMessageBox(csMsg, MB_ICONINFORMATION);
delete[] pBlock;
}
よろしければポチッと押してください