Как обработать событие DocumentCompleted от IWebBrowser2 в консольном приложении ?
Добавлено: 16 мар 2017, 19:46
Добрый день!
Есть консольное приложение, необходимо поймать событие DocumentCompleted которое отправит IWebBrowser2 после загрузки страницы и проверить что IWebBrowser2.ReadyState имеет READYSTATE_COMPLETE. В COM к сожалению не разбираюсь, можно хотя бы ссылку с примером подобного.
Есть консольное приложение, необходимо поймать событие DocumentCompleted которое отправит IWebBrowser2 после загрузки страницы и проверить что IWebBrowser2.ReadyState имеет READYSTATE_COMPLETE. В COM к сожалению не разбираюсь, можно хотя бы ссылку с примером подобного.
Код: Выделить всё
#include <mshtml.h>
#include <exdisp.h>
void test()
{
if (SUCCEEDED(OleInitialize(NULL)))
{
IWebBrowser2* pBrowser2;
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
IID_IWebBrowser2, (void**)&pBrowser2);
if (pBrowser2)
{
VARIANT vEmpty;
VariantInit(&vEmpty);
VARIANT vFlags;
V_VT(&vFlags) = VT_I4;
V_I4(&vFlags) = navOpenInNewWindow;
BSTR bstrURL = SysAllocString(L"http://forum.developing.ru");
HRESULT hState = pBrowser2->Navigate(bstrURL, &vFlags, &vEmpty, &vEmpty, &vEmpty);
READYSTATE ReadyState;
if (SUCCEEDED(hState))
{
pBrowser2->put_Visible(VARIANT_TRUE);
if (SUCCEEDED(pBrowser2->get_ReadyState(&ReadyState)))
{
do //цилк полная фигня и дождаться что ReadyState будет READYSTATE_COMPLETE невозможно, то есть он бесконечный.
{
pBrowser2->get_ReadyState(&ReadyState);
}
while (ReadyState != READYSTATE_COMPLETE);
}
std::cout << "READYSTATE_COMPLETE" << std::endl;
}
pBrowser2->Quit();
SysFreeString(bstrURL);
pBrowser2->Release();
}
}
}
int main()
{
test();
return 0;
}