怎么利用IHTMLDocument2获取中的数据
如何利用IHTMLDocument2获取<object classid=...>***</object>中的数据?
如题,如何利用IHTMLDocument2获取<object classid=...>***</object>中的数据?
我需要获得object后面所有的数据,对数据进行分析
------解决方案--------------------
如题,如何利用IHTMLDocument2获取<object classid=...>***</object>中的数据?
我需要获得object后面所有的数据,对数据进行分析
------解决方案--------------------
- C/C++ code
//获得ActiveX控件接口,注意ActiveX控件接口和HTML对象元素接口不是同一个接口,你不能直接使用IHtmlObjectElement接口来访问控件 HRESULT CDHtmlDialog::GetControlDispatch(LPCTSTR szId, IDispatch **ppdisp) { HRESULT hr = S_OK; CComPtr<IDispatch> spdispElem; hr = GetElement(szId, &spdispElem); if (spdispElem) { CComPtr<IHTMLObjectElement> sphtmlObj; hr = spdispElem.QueryInterface(&sphtmlObj); if (sphtmlObj) { spdispElem.Release(); hr = sphtmlObj->get_object(ppdisp); } } return hr; } 有了Active控件的接口,下面的工作就简单多了,举例来说,如果要访问控件的指定名字的无参数属性,只需简单的调用IDispatch接口的GetIDsOfNames获得属性的DispID,然后调用Invoke方法取得属性 //获得控件属性,通过名字访问 VARIANT CDHtmlDialog::GetControlProperty(LPCTSTR szId, LPCTSTR szPropName) { CComVariant varEmpty; CComPtr<IDispatch> spdispElem; GetControlDispatch(szId, &spdispElem); if (!spdispElem) return varEmpty; DISPID dispid; USES_CONVERSION; LPOLESTR pPropName = (LPOLESTR)T2COLE(szPropName); HRESULT hr = spdispElem->GetIDsOfNames(IID_NULL, &pPropName, 1, LOCALE_USER_DEFAULT, &dispid); if (SUCCEEDED(hr)) return GetControlProperty(spdispElem, dispid); return varEmpty; }
------解决方案--------------------
额...检查下头文件看看,实在不行只能换种方法.
另外种方法
CComPtr <IHTMLDocument2> pHTMLDoc2;
pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc2);
CComPtr <IHTMLElementCollection> pAllElements;
HRESULT hr = pHTMLDoc2->get_all(&pAllElements);
IHTMLElementCollection用它的tags方法拿到object集合的IDispath
再从IDispath中QueryInterface得到另外一个IHTMLElementCollection
再继续就应该可以了.