读书人

怎么利用IHTMLDocument2获取lt;object c

发布时间: 2014-04-28 18:49:12 作者: rapoo

如何利用IHTMLDocument2获取<object classid=...>***</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
再继续就应该可以了.

读书人网 >VC/MFC

热点推荐