ATL控件嵌入在一个网页内, 在ATL控件内获取网页的IWebBrowser2指针, 并获取对应的网页元素对象, 如Document, Script等
- CComPtr<IWebBrowser2> m_pIWebBrowser;
- CComPtr<IHTMLDocument2> m_pDocument;
- CComPtr<IDispatch> m_pScript;
- BOOL GetIWebBrowser()
- {
- IOleClientSite* pClientSite;
- GetClientSite(&pClientSite);
- if (pClientSite == NULL)
- return FALSE;
- CComQIPtr<IServiceProvider> pISP(pClientSite);
- if (pISP == NULL)
- return FALSE;
- pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,(void **)&m_pIWebBrowser);
- if (m_pIWebBrowser == NULL)
- return FALSE;
- //取得IHTMLDocument2
- m_pIWebBrowser->get_Document((IDispatch**)&m_pDocument);
- if (m_pDocument == NULL)
- return FALSE;
- //获取脚本对象
- m_pDocument->get_Script(&m_pScript);
- if (m_pScript == NULL)
- return FALSE;
- return TRUE;
- }
- //根据获取到的脚本对象, 可执行一段脚本函数
- void InvokeWebScript(BSTR srciptName)
- {
- CComBSTR bstrMember(srciptName);
- DISPID dispid;
- HRESULT hr;
- if(m_pScript!=NULL)
- {
- hr = m_pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);
- if (SUCCEEDED(hr))
- {
- DISPPARAMS dispparams;
- memset(&dispparams, 0, sizeof(DISPPARAMS));
- dispparams.cArgs = 0;
- dispparams.cNamedArgs = 0;
- EXCEPINFO excepInfo;
- memset(&excepInfo, 0, sizeof(EXCEPINFO));
- CComVariant vaResult;
- // initialize to invalid arg
- UINT nArgErr = (UINT)-1;
- // 执行js代码
- hr = m_pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
- }
- }
- }