void CAboutDlg::FillObjectVersion(CLSID clsid) { LPOLESTR szCLSID=NULL; StringFromCLSID (clsid, &szCLSID); CString strKey = _T("CLSID\\"); strKey += CString (szCLSID); CoTaskMemFree (szCLSID); CRegKey key; long lResult = key.Open(HKEY_CLASSES_ROOT, strKey , KEY_READ ); if (lResult == ERROR_SUCCESS) { CEgRegKey keyModule; long lResult = keyModule.Open( key, _T("LocalServer32"), KEY_READ ); if (lResult != ERROR_SUCCESS) lResult = keyModule.Open( key, _T("InprocServer32"), KEY_READ ); if (lResult == ERROR_SUCCESS) { CString strVal; //LPTSTR szVal = strVal.GetBuffer(MAX_PATH); //DWORD dwSize = MAX_PATH; keyModule.QueryValue (strVal, _T("")); strVal.ReleaseBuffer(); if (!strVal.IsEmpty() ) { CModuleVersion ver; CString strVer = _T("N/A"); if (ver.GetFileVersionInfo (strVal)) ver.GetValue(_T("FileVersion"), strVer); WIN32_FIND_DATA data; HANDLE hFind = FindFirstFile (strVal, &data); if( hFind != INVALID_HANDLE_VALUE ) { FindClose(hFind); CString strFmt; strFmt.Format (_T("%s\t%s"), data.cFileName, (LPCTSTR) strVer); AddInfoStr (strFmt); } } } key.Close(); } }