KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
[ Revised yet again for clarity] I have a C++ program which interacts with a website. The site is IE-specific, and so is my program. I'm connecting to the running instance of IE in an ordinary way ( out of process -- see code). Once I get the IWebBrowser2 , I have no problem getting the IHTMLDocument2 and interacting with the individual IHTMLElement objects, filling in fields and clicking buttons. But if the web page has javascript that calls window.showModalDialog , I'm stuck: I need to interact with the HTML elements in the popup, just like the other pages; but I can't seem to get its IWebBrowser2 . The popup is always titled "Web Page Dialog", and is a window of type Internet Explorer_TridentDlgFrame containing an Internet Explorer_Server . But I can't get the IWebBrowser2 from the Internet Explorer_Server window the way I can when it's a normal IE instance. I can get the IHTMLDocument2Ptr , but when I try to get the IWebBrowser2 I get an HRESULT of E_NOINTERFACE . The code is pretty standard stuff, and works fine if it's a 'normal' IE window IHTMLDocument2Ptr pDoc; LRESULT lRes; /* hWndChild is an instance of class "Internet Explorer_Server" */ UINT nMsg = ::RegisterWindowMessage( "WM_HTML_GETOBJECT" ); ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes ); LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, "ObjectFromLresult" ); if ( pfObjectFromLresult != NULL ) { HRESULT hr; hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc ); if ( SUCCEEDED(hr) ) { IServiceProvider *pService; hr = pDoc->QueryI
Tags (comma-separated)
Save Edits
Cancel