2016-04-07 2 views
1

J'essaie de convertir un objet COM IWebBrowser2 en IHTMLDocument2 afin que je puisse manipuler le contenu du navigateur Web IE.IWebBrowser2.Document ne retourne pas IHTMLDocument2

Voici le début de mon 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(); 
    }  
} 

A l'appel à IWebBrowser2 :: get_document() la variable pDispatch reste nulle et le HRESULT retourné est E_FAIL.

Que dois-je faire pour obtenir l'objet IHTMLDocument2 de IWebBrowser2?

Répondre

2

Appelez le Navigate pour ouvrir une page Web en premier. Sinon, il n'y a pas de document à obtenir.

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

essayé cela, ne résout pas le problème que je suis. Ai-je peut-être manqué quelque chose dans mon environnement? J'essaie d'être administrateur, donc je ne pense pas que ce soit un problème d'autorisations. – tt9

+0

Après avoir joué avec, je me rends compte qu'il doit attendre que le document soit complètement chargé. Pour tester j'ai juste jeté un sommeil (5000) puis ça a marché. Je vais devoir trouver comment capturer l'événement chargé de document mais pour l'instant vous avez répondu à ma question, merci! – tt9

+0

Oh, j'ai raté ça parce que je passais dans le débogueur, je n'ai pas remarqué qu'il fallait un délai. Qu'en est-il de mettre un contrôle de navigateur dans votre propre fenêtre et de changer son contenu? Je pense que cela devrait être plus facile. –