IWebBrowser2.文档未返回IHTMLDocument2

IWebBrowser2.Document not returning IHTMLDocument2

本文关键字:IHTMLDocument2 返回 文档 IWebBrowser2      更新时间:2023-10-16

我正在尝试将IWebBrowser2COM对象强制转换为IHTMLDocument2,以便操作IE web浏览器的内容。

这是我的代码的开始:

int main()
{
    if (SUCCEEDED(OleInitialize(NULL)))
    {
        CComQIPtr<IWebBrowser2> pBrowser2;
        CComQIPtr<IDispatch> pDispatch;
        CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
            IID_IWebBrowser2, (void**)&pBrowser2);
        if (pBrowser2)
        {    
            //Here, pDispatch remains null and hr == E_FAIL
            HRESULT hr = pBrowser2->get_Document(&pDispatch);
        }
        OleUninitialize();
    }    
}

在调用IWebBrowser2::get_Document()时,pDispatch变量保持为null,返回的HRESULT为E_FAIL。

我需要做些什么才能从IWebBrowser2中获取IHTMLDocument2对象?

首先调用Navigate打开网页。否则就没有可获取的文档。

if (pBrowser2)
{
    VARIANT vEmpty;
    VariantInit(&vEmpty);
    BSTR str = SysAllocString(L"http://google.com");
    HRESULT hr = pBrowser2->Navigate(str , &vEmpty, &vEmpty, &vEmpty, &vEmpty);
    if (SUCCEEDED(hr))
    {
        //optional: show the explorer window
        //pBrowser2->put_Visible(VARIANT_TRUE);
        hr = pBrowser2->get_Document(&pDispatch);
        if (hr == S_OK)
            OutputDebugStringW(L"okayn");
    }
    SysFreeString(str);
    pBrowser2->Quit();
}