在网上看到一篇get flash version 的代码觉得不错
class CFlashocx  
{
public:
 CFlashocx();
 virtual ~CFlashocx();
 
 CString getVersion(); 
};
#include "stdafx.h"
#include "flashocx.h"
#include "comdef.h"
#include <atlbase.h>
		#define COMR_CHECK(x) \
do \
{  \
if( FAILED(x) ) \
_com_issue_error((x)); \
} while (0) \
		#ifdef _WIN32
#define LOADLIBRARY_FAILED(x) (x == 0)
#else
#define LOADLIBRARY_FAILED(x) (x <= HINSTANCE_ERROR)
#endif
		STDAPI DllRegisterServer(void) ;
typedef HRESULT (STDAPICALLTYPE *CTLREGPROC)();
CFlashocx::CFlashocx()
{
		}
		CFlashocx::~CFlashocx()
{
		}
		CString CFlashocx::getVersion()
{
 USES_CONVERSION;
 CString strVersion;
		 try
 {
  CoInitialize(NULL);  
		  wchar_t progid[] = L"ShockwaveFlash.ShockwaveFlash";
  CLSID clsid;
  COMR_CHECK(::CLSIDFromProgID(progid, &clsid));
  
  // get the IDispatch Interface
  IDispatch* pIDispatch = NULL;
  COMR_CHECK(::CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch));
		  BSTR szMember = OLESTR("FlashVersion");
  DISPID dispid;
  
  COMR_CHECK(pIDispatch->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid));
		  DISPPARAMS dispParams = {NULL,   NULL,   0,   0};  ;
  VARIANT    varResult;
 
  COMR_CHECK(pIDispatch->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD,
         &dispParams, &varResult, NULL, NULL)); 
		  strVersion.Format(_T("%x"), varResult.intVal);
		  CString strDevVersion;
        
  strDevVersion = strVersion.Left(strVersion.GetLength() - 4);
  long nVersion = strtol(T2A(strDevVersion), NULL, 16);
        strVersion.Format(_T("%ld"), nVersion);
		  strVersion = strVersion + _T("0000");
		
				
  pIDispatch->Release();
		  CoUninitialize();
 }
 catch (_com_error& e)
 {
  e;
  strVersion = _T("0000");
 }
		
				
 return strVersion;
}