プログラムファイルのバージョン番号を取得する

プログラムのバージョン番号を取得して表示したい場合などがあります。
以下のような感じで関数化して使っています。

   //---------------------------------------------------------------------------
   //      ファイルのバージョン番号を文字列で返す
   //      引 数:    strPATH ---- バージョンを返したいファイルへのパス
   //                                 ファイルが指定されなかった場合は自分自身
   //      戻り値:      バージョン番号文字列
   //                                                  Written by Shue
   //---------------------------------------------------------------------------
   AnsiString __fastcall subGetVersion(AnsiString strPATH)
   {
       DWORD *dwHDL, dwSIZE, dwTMP;
       unsigned int iSIZE;
       char *cBUF, bBUF[MAX_PATH];
       AnsiString strRET = "";
       VS_FIXEDFILEINFO vsfDAT;
       int i1, i2, i3, i4;

       try    {
           //    パスのチェック
           if (strPATH.Trim().IsEmpty() || (!FileExists(strPATH)))    {
               //    自分自身のパスを求める
               ::GetModuleFileName(::GetModuleHandle(NULL), bBUF, MAX_PATH);
               strPATH = AnsiString(bBUF);
           }

           //    バージョン情報のサイズを取得
           dwSIZE = ::GetFileVersionInfoSize(strPATH.c_str(), &dwTMP);

           if (dwSIZE > 0)    {
               //    バージョン情報を求める
               cBUF = (char*)malloc(dwSIZE + 2);
               if (cBUF != NULL)    {
                   if (::GetFileVersionInfo(strPATH.c_str(), NULL, dwSIZE, cBUF))    {
                       //    バージョン情報を変換
                       dwHDL = NULL;
                       iSIZE = 0;
                       if (::VerQueryValue(cBUF, "\\", (void**)&dwHDL, &iSIZE))    {
                           //    バージョン文字列を生成
                           ::CopyMemory(&vsfDAT, dwHDL, iSIZE);

                           i1 = vsfDAT.dwFileVersionMS;
                           i2 = vsfDAT.dwFileVersionMS;
                           i3 = vsfDAT.dwFileVersionLS;
                           i4 = vsfDAT.dwFileVersionLS;
                           i1 = (i1 >> 16) & 0xffff;
                           i2 = i2 & 0xffff;
                           i3 = (i3 >> 16) & 0xffff;
                           i4 = i4 & 0xffff;

                           strRET = AnsiString(i1) + "." + AnsiString(i2) + ".";
                           strRET += AnsiString(i3) + "." + AnsiString(i4);
                       }
                   }
                   free(cBUF);
               }
           }
       }
       catch(...)    {
           return "";
       }

       return strRET;
   }

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-09 (日) 22:30:50