还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

获得ActiveX控件所在网页的对象模型

来源:chinaunix     2015-11-06 16:34:28    人气:     我有话说( 0 人参与)

基本上翻译自以下两文http: support.microsoft.com kb 172763 EN-US #appliestohttp: support.microsoft.com kb 181678一. 获得所在IE页...

基本上翻译自以下两文
http://support.microsoft.com/kb/172763/EN-US/#appliesto
http://support.microsoft.com/kb/181678

一. 获得所在IE页面的URL

  1. 获得IOleClientSite接口指针
  2. 调用IOleClientSite::GetMoniker()获得client site的moniker对象指针
  3. 调用IMoniker::GetDisplayName()获得当前文档的URL

下面是ATL中获得URL的例程,这里是在SetClientSite中获得,可以在其它任何时候获得。

STDMETHOD(SetClientSite)(IOleClientSite *pClientSite)
{
   if (pClientSite != NULL)
   {
      // Obtain URL from container moniker.
      CComPtr<IMoniker> spmk;
      LPOLESTR pszDisplayName;

      if (SUCCEEDED(pClientSite->GetMoniker(
                                    OLEGETMONIKER_TEMPFORUSER,
                                    OLEWHICHMK_CONTAINER,
                                    &spmk)))
      {
         if (SUCCEEDED(spmk->GetDisplayName(
                                 NULL, NULL, &pszDisplayName)))
         {
            USES_CONVERSION;

            CComBSTR bstrURL;
            bstrURL = pszDisplayName;

            ATLTRACE("The current URL is %s\n", OLE2T(bstrURL));
            CoTaskMemFree((LPVOID)pszDisplayName);
         }
      }
   }

   return IOleObject_SetClientSite(pClientSite);
}

在MFC中,可以重载COleControl::OnSetClientSite在设置ClientSite时就获得URL:

void CMyCtrl::OnSetClientSite() {    LPOLECLIENTSITE pClientSite = GetClientSite();    ......//其它同上。}

二.   访问所在文档的对象模型,即document,element等

1.   获得IWebBrowserApp,使用

a.使用IOleClientSite接口获得IServiceProvider接口:

CComQIPtr pISP;
pClientSite->QueryInterface(IID_IServiceProvider, (void **)&pISP);

b.使用IServiceProvider接口获得IWebBrowserApp接口:

pISP->QueryService(SID_SWebBrowserApp, IID_IWebBrowserApp,   (void **)&pIWebBrowserApp));

对于IE4或以后版本,也可以获得IWebBrowserApp2接口:

pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,  (void **)&pIWebBrowser2));

2.  使用IWebBrowserApp获得文档(document)对象,接着是其它对象。

ActiveX 对象模型

本文源自互联网,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,
版权归原作者,如有问题请联系service@tsingfun.com (编辑:admin)
分享到: