#pragma comment(lib,"version.lib")
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 現在の実行モジュールのフル・パスを取得
char szModuleName[_MAX_PATH + 1];
int nRet = ::GetModuleFileName( NULL, szModuleName, _MAX_PATH );
DWORD dwSize = 0;
DWORD dwReserved;
dwSize = ::GetFileVersionInfoSize( szModuleName, &dwReserved );
// ファイルのバージョン情報を取得
char *pBuf=new char[dwSize+1];
BOOL bRet = ::GetFileVersionInfo( szModuleName, 0, dwSize, pBuf );
//charset変換テーブルを取得
LPWORD lpWord;
UINT dwLen;
bRet = ::VerQueryValue( pBuf, "\\VarFileInfo\\Translation", (void **)&lpWord, &dwLen );
if( bRet ) {
// lpWord[0] は言語セット lpWord[1] はキャラクタセット
DWORD dwLangAndCharSet = MAKELONG( lpWord[1], lpWord[0] );
//version
char szKey[255];
LPSTR lpStr;
sprintf( szKey, "\\StringFileInfo\\%08x\\%s", dwLangAndCharSet, "FileVersion" );
bRet = ::VerQueryValue( pBuf, szKey, (void **)&lpStr, &dwLen );
if( bRet ) {
SetDlgItemText(IDC_VER,lpStr);
}
}
delete pBuf;
return TRUE;
}
※EXEから利用されたDLL内のバージョンリソースを取得する場合は、DLL内で上記GetModuleFileName()するとき、第1パラメータのNULLをAfxGetApp()->m_hInstance にすればよい。
2009年10月20日
[C++]AboutBoxにリソースからバージョンを取得して表示
MFC AppWizardで生成したAboutBoxに動的にVersionリソースから取得した情報を表示するのは結構面倒。ここではIDC_VERというIDのSTATICコントロールにセットする場合の例。AboutBoxにCDiglog::OnInitDialog()をオーバーライドすべし。version.libライブラリも必要なのでLINKする。ここでは#pragma指定。


ブログ更新がんばってください。
今後いろいろ参考にさせていただくかもしれません。
応援してます。