Получить исходный код HTML из CHtmlView (Visual Studio 6)

Я работаю над приложением, которое использует CHtmlView. Новые требования означают, что я хотел бы иметь возможность получить исходный код HTML из класса для анализа определенного тега (или, если возможно, просто получить информацию в теге). Это было бы хорошо, если бы мы использовали более новую систему, и я мог бы использовать CHtmlView :: GetSource, но он не существует.

У меня был довольно обширный поиск в Интернете, но я довольно плохо знаком с большинством программ для Windows и пока не смог достичь ничего полезного.

Так что, если у кого-нибудь есть пример того, как извлечь HTML из CHtmlView без использования GetSource, я был бы признателен за его просмотр. я пробовал

    BSTR bstr;
_bstr_t * bstrContainer;
HRESULT hr;
IHTMLDocument2 * pDoc;
IDispatch * pDocDisp = NULL;
pDocDisp = this->GetHtmlDocument();
if (pDocDisp != NULL) {
hr = pDocDisp->QueryInterface (IID_IHTMLDocument2, (void**)&pDoc);
if (SUCCEEDED(hr)) {
if (pDoc->toString(&bstr) != S_OK) {
//error...
} else {
bstrContainer = new _bstr_t(bstr);
size = (bstrContainer->length()+1)*2;
realString = new char[size];
strncpy(realString, (char*)(*bstrContainer), size);
}
} else {
//error
}
pDocDisp->Release();
}

но это в основном просто дает мне «[объект]» в realString. Как я уже говорил, новичок в Windows.

Любая помощь приветствуется.

1

Решение

Добавьте эту вспомогательную функцию в ваш производный от CHtmlView класс, чтобы получить источник html. Не забудьте проверить возвращенное логическое состояние из этой функции, так как com-интерфейс может быть довольно ненадежным, когда системные ресурсы малы.

 /* ============================================== */
BOOL CTest1View::GetHtmlText(CString &strHtmlText)
{
BOOL bState = FALSE;
// get IDispatch interface of the active document object
IDispatch *pDisp = this->GetHtmlDocument();
if (pDisp != NULL)
{   // get the IHTMLDocument3 interface
IHTMLDocument3 *pDoc = NULL;
HRESULT hr = pDisp->QueryInterface(IID_IHTMLDocument3, (void**) &pDoc);
if (SUCCEEDED(hr))
{   // get root element
IHTMLElement *pRootElement = NULL;
hr = pDoc->get_documentElement(&pRootElement);
if (SUCCEEDED(hr))
{   // get html text into bstr
BSTR bstrHtmlText;
hr = pRootElement->get_outerHTML(&bstrHtmlText);
if (SUCCEEDED(hr))
{   // convert bstr to CString
strHtmlText = bstrHtmlText;
bState = TRUE;
SysFreeString(bstrHtmlText);
}
pRootElement->Release();
}
pDoc->Release();
}
pDisp->Release();
}
return bState;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]