2014년 10월 27일 월요일

파일버전 얻어오기

우선 자세한 정보는 여기에서...

http://dcple.com/blog/tag/%EB%A6%AC%EC%86%8C%EC%8A%A4

아래코드는 파일버전을 얻어와서, 해당 파일의 버전이 특정 값보다 작으면 웹브라우저를 띄우는 코드이다. 웹브라우저 띄우는 코드는, 내 블로그 어딘가에 있기도 하다.

 DWORD dwHandle;
 LPVOID ptr;
 UINT uLength;

 DWORD dwVersionInfoSize = GetFileVersionInfoSize(szModuleName, &dwHandle);
 if(dwVersionInfoSize != 0)
 {
  LPVOID pFileInfo = (LPVOID) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwVersionInfoSize);

  GetFileVersionInfo(szModuleName, dwHandle, dwVersionInfoSize, pFileInfo);
  VerQueryValue(pFileInfo, TEXT("\\VarFileInfo\\Translation"), &ptr, &uLength);

  WORD *id = (WORD*) ptr;
  TCHAR szString[255];
  _stprintf(szString, _T("\\StringFileInfo\\%04X%04X\\ProductVersion"), id[0], id[1]);

  VerQueryValue(pFileInfo, szString, &ptr, &uLength);

  if(uLength != 0)
  {
   TCHAR sOut[255];
   memset(sOut, 0x00, 255);
   _tcscpy(sOut, (TCHAR *) ptr); //sOut에 파일버전이 들어가있음.
   HeapFree(GetProcessHeap(), 0, pFileInfo);

   if(_tcscmp(sOut,_T("1, 0, 812, 3110")) < 0)
   {
    if(MessageBox(NULL,_T("최신버전 재설치가 필요합니다. 다운로드 페이지로 이동하시겠습니까?"),_T("NetsyncBrowser3.5"),MB_OKCANCEL) == IDOK)
    {
     IWebBrowser2* pWebBrowser = NULL;
     s = _T("웹주소");
     BSTR bstrURL = s.AllocSysString();
     BSTR bstrHeader = NULL;
     VARIANT vtPostData = {0};
     VARIANT vtEmpty;
     VARIANT vtHeader;

     HRESULT hr = ::CoCreateInstance( __uuidof(InternetExplorer), NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
      __uuidof(IWebBrowser2), reinterpret_cast<LPVOID *>(&pWebBrowser) );

     if(hr != S_OK)
     {
      AfxMessageBox(_T("웹브라우저를 실행시키지 못했습니다."));
      return FALSE;
     }

     VariantInit( &vtEmpty );
     VariantInit( &vtPostData );
     VariantInit( &vtHeader );

     V_VT( &vtHeader ) = VT_BSTR;
     V_BSTR( &vtHeader ) = bstrHeader;

     pWebBrowser->put_Visible ( (VARIANT_BOOL) TRUE );

     pWebBrowser->Navigate( bstrURL, &vtEmpty, &vtEmpty, &vtPostData, &vtHeader );

     HWND hIE;
     hr=pWebBrowser->get_HWND((long *)&hIE);
     if(hr == S_OK)
      ::SetWindowPos(hIE, HWND_TOPMOST, 0, 0,0 ,0 , SWP_NOMOVE | SWP_NOSIZE);
     return FALSE;
    }
    else
     return FALSE;
   }
  }
  else
  {
   HeapFree(GetProcessHeap(), 0, pFileInfo);
  }
 }

우선 등록해놓고 나중에 공부해야지~

댓글 없음: