2016-04-07 7 views
1

Ich versuche, ein IWebBrowser2 COM-Objekt in ein IHTMLDocument2 zu werfen, damit ich den Inhalt des IE-Webbrowsers bearbeiten kann. HierIWebBrowser2.Document nicht zurück IHTMLDocument2

ist der Beginn meines Code:

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(); 
    }  
} 

Bei dem Aufruf von IWebBrowser2 :: Get_Document() die pDispatch Variable bleibt null und die zurückgegebene HRESULT ist E_FAIL.

Was muss ich tun, um das IHTMLDocument2-Objekt vom IWebBrowser2 zu erhalten?

Antwort

2

Rufen Sie Navigate, um zuerst eine Webseite zu öffnen. Ansonsten gibt es kein Dokument zu bekommen.

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"okay\n"); 
    } 

    SysFreeString(str); 
    pBrowser2->Quit(); 
} 
+0

dies ausprobiert, repariert nicht das Problem, das ich habe. Vermisse ich etwas in meiner Umgebung? Ich versuche etwas als Administrator, also glaube ich nicht, dass es ein Berechtigungsproblem ist. – tt9

+0

Nachdem ich damit herumgespielt habe, merke ich, dass es warten muss, bis das Dokument vollständig geladen ist. Um zu testen, warf ich gerade einen Sleep (5000) und dann funktionierte es. Ich werde herausfinden müssen, wie man das dokumentgeladene Ereignis erfasst, aber bis jetzt hast du meine Frage beantwortet, danke! – tt9

+0

Oh, das habe ich verpasst, weil ich im Debugger durchgetreten bin, habe nicht bemerkt, dass es eine Verzögerung erfordert. Wie wäre es mit einem Browser-Steuerelement in Ihrem eigenen Fenster und ändern Sie den Inhalt? Ich denke, das sollte einfacher sein. –

Verwandte Themen