フリーソフト

« [BCB] MDIで親フォームにスクロールバーを出さない方法 | トップページ | [BCB] EXEファイルだけで実行できるようコンパイルする »

[BCB] バージョン情報の取得

void GetFileVersionInformation(char *Result,int Size)
{
  LPVOID lpStr1 = NULL;
  LPVOID lpStr2 = NULL;
  WORD* wTmp;
  DWORD dwHandle_dammy = NULL;
  UINT nRet;
  UINT dwLength;
  char sFileName[1024];
  char sTmp[1024];
  char *sInfo;

  if ((Result==NULL) || (Size==0)) return;

  memset(sFileName,0x00,1024);
  GetModuleFileName(NULL,sFileName,1024);

  //バージョン情報のサイズを取得する
  DWORD dwInfoSize = GetFileVersionInfoSize((char*)(LPCTSTR)sFileName, &dwHandle_dammy);
  LPVOID* pVersionInfo = new LPVOID[dwInfoSize];

  nRet = GetFileVersionInfo((char*)(LPCTSTR)sFileName, dwHandle_dammy, dwInfoSize, pVersionInfo);
  if(nRet){
    //言語IDとキャラクタIDを取得する
    nRet = VerQueryValue(pVersionInfo, "\\VarFileInfo\\Translation", &lpStr1, &dwLength);
    if(nRet){
      wTmp = (WORD*)lpStr1;

      //バージョン情報を取得する
      StringCbPrintfA(sTmp,1024,"\\StringFileInfo\\%04x%04x\\FileVersion", *wTmp, *(wTmp + 1));
      nRet = VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength);

      if(nRet) sInfo = (char*)lpStr2;
      else sInfo = "";

      strncpy(Result,sInfo,Size-1);
    } else {
      strncpy(Result,"",Size-1);
    }
  } else {
    strncpy(Result,"",Size-1);
  }
  delete[] pVersionInfo;
}


=====
AnsiString 版

AnsiString GetFileVersionInformation(void)
{
  LPVOID lpStr1 = NULL;
  LPVOID lpStr2 = NULL;
  WORD* wTmp;
  DWORD dwHandle_dammy = NULL;
  UINT nRet;
  UINT dwLength;
  AnsiString sTmp;
  AnsiString sInfo;
  AnsiString Result="";

  //バージョン情報のサイズを取得する
  DWORD dwInfoSize = GetFileVersionInfoSize(Application->ExeName.c_str(), &dwHandle_dammy);
  LPVOID* pVersionInfo = new LPVOID[dwInfoSize];

  nRet = GetFileVersionInfo(Application->ExeName.c_str(), dwHandle_dammy, dwInfoSize, pVersionInfo);
  if(nRet){
    //言語IDとキャラクタIDを取得する
    nRet = VerQueryValue(pVersionInfo, "\\VarFileInfo\\Translation", &lpStr1, &dwLength);
    if(nRet){
      wTmp = (WORD*)lpStr1;

      //バージョン情報を取得する
      sTmp.sprintf("\\StringFileInfo\\%04x%04x\\FileVersion", *wTmp, *(wTmp + 1));
      nRet = VerQueryValue(pVersionInfo, sTmp.c_str(), &lpStr2, &dwLength);

      if(nRet) Result = (char*)lpStr2;
      else Result = "-";
    } else {
      Result="-";
    }
  } else {
    Result="-";
  }
  delete[] pVersionInfo;

  return Result;
}

« [BCB] MDIで親フォームにスクロールバーを出さない方法 | トップページ | [BCB] EXEファイルだけで実行できるようコンパイルする »

C++Builder」カテゴリの記事

システム関連」カテゴリの記事

コメント

この記事へのコメントは終了しました。