//EnumWindows handler BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) { try { CMWDiscovery* mwd = reinterpret_cast<CMWDiscovery*>(lparam); IAccessiblePtr pAccessibleObject; HRESULT hr = ::AccessibleObjectFromWindow( hwnd, OBJID_WINDOW, __uuidof(IAccessible), (void**)&pAccessibleObject ); if( hr == S_OK ) { if( pAccessibleObject ) { _bstr_t bsName; VARIANT varChild; varChild.vt = VT_I4; varChild.lVal = CHILDID_SELF; if (SUCCEEDED(pAccessibleObject->get_accName(varChild, bsName.GetAddress()))) { CStdStringW name = bsName; CStdString::size_type iFind = name.rfind(mwd->m_name); if(iFind != CStdString::npos ) { mwd->m_hwnd = hwnd; return false; } } } } } catch(...) { //don't want this to stop the handler LOG_WS_ERROR(_T("Exception during EnumWindows")); } return true; }