#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指定。


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