вставка текста в edit в IE (после открытия нового окна)
От: boris_oleinic  
Дата: 11.10.05 11:46
Оценка:
Друзья!

Потратил уйму времени на следующую проблему: необходимо программно вставлять текст в поле ввода в HTML документе, загруженном в IE. Приведенная ниже процедура _отлично_ выполняет эту задачу, пока в IE через гл.меню или нажатием на ссылку не открывается новое окно. После этого процедура "сбоит", выдавая exception при попытке "вставить" новое значение в поле ввода.

Если кто встречался с таким неприятным моментом, подскажите, пожалуйста, как преодолеть...

Заранее благодарен.

Спасибо


bool CMyClass::PutHtmlText(BSTR const* pbsTextToPut)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); // Needed for any MFC usage in DLL

    try
    {
        CComPtr<IDispatch> spDisp;
        HRESULT hr = ((CSearchToolBand*)m_pBand)->m_spIE->get_Document(&spDisp);
        if(!FAILED(hr))
        {
            CComQIPtr<IHTMLDocument2> spHtmlDoc2(spDisp);
            if(spHtmlDoc2)
            {
                CComPtr<IHTMLElement> spElement;
                spHtmlDoc2->get_activeElement(&spElement);
                CComQIPtr<IHTMLInputTextElement> spInputTextElement(spElement);
                if(spInputTextElement)
                {
                    //до сих пор все ОК
                    CComBSTR bsInValue(*pbsTextToPut);
                    hr = spInputTextElement->put_value(bsInValue);
                    //строчка выше вызывает исключение если было открыто новое окно IE браузера
                    if(SUCCEEDED(hr))
                    {
                        return true;
                    } // if(SUCCEEDED(hr))
                } // if(spInputTextElement)
            } // if(spHtmlDoc2)
        } // if(!FAILED(hr))
    } // try
    catch(...)
    {
        DBGPRINT_FMT("PutHtmlText <%p>: raised exception", (void*)this);
    } // catch
    return false;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.