gpt4 book ai didi

c++ - 将对象与 IDispatch 进行比较以仅获取主框架 (BHO)

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:08 26 4
gpt4 key购买 nike

我不知道是否有人熟悉 BHO(浏览器助手对象),但是 c++ 专家也可以帮助我。

在我的 BHO 中,我只想在主框架上运行 OnDocumentComplete() 函数 - 第一个容器,而不是当前页面内的所有 Iframe。 (另一种方法是仅在这是主框架时才放置一些代码)。

我找不到如何跟踪何时填充主框架。

在谷歌搜索后,我发现每一帧都有“IDispatch* pDisp”,我必须将它与指向第一帧的指针进行比较。

这是主要功能:

STDMETHODIMP Browsarity::SetSite(IUnknown* pUnkSite)
{
if (pUnkSite != NULL)
{
// Cache the pointer to IWebBrowser2.
HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);
if (SUCCEEDED(hr))
{
// Register to sink events from DWebBrowserEvents2.
hr = DispEventAdvise(m_spWebBrowser);
if (SUCCEEDED(hr))
{
m_fAdvised = TRUE;
}
}
}
else
{
// Unregister event sink.
if (m_fAdvised)
{
DispEventUnadvise(m_spWebBrowser);
m_fAdvised = FALSE;
}

// Release cached pointers and other resources here.
m_spWebBrowser.Release();
}

// Call base class implementation.
return IObjectWithSiteImpl<Browsarity>::SetSite(pUnkSite);
}

这是我想知道它是否是主窗口(框架)的地方:

void STDMETHODCALLTYPE Browsarity::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
// as you can see, this function get the IDispatch *pDisp which is unique to every frame.
//some code
}

我在 Microsoft 论坛上问了这个问题,但没有解释如何实际实现就得到了答案:http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/7c433bfa-30d7-42db-980a-70e62640184c

最佳答案

jeffdav 的建议是,通过QueryInterface() 测试pDisp 是否支持IWebBrowser2,如果支持,则检查它是否支持与您存储在 SetSite() 中的对象相同。
QueryInterface() rules只要求 IUnknownQI 始终产生相同的指针值,因此您必须另外将 QIIUnknown 并比较结果指针。

这将导致在 OnDocumentComplete() 中出现类似这样的结果:

IWebBrowser2* pBrowser = 0;
IUnknown *pUnk1=0, *pUnk2=0;
if( SUCCEEDED(pDisp ->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser))
&& SUCCEEDED(pDisp ->QueryInterface(IID_IUnknown, (void**)&pUnk1))
&& SUCCEEDED(m_spBrowser->QueryInterface(IID_IUnknown, (void**)&pUnk2))
&& (pUnk1 == pUnk2))
{
// ... top-level
}

...或者如果您正在使用 ATL(如 m_spWebBrowser 所建议的那样):

CComQIPtr<IWebBrowser2> spBrowser(pDisp);
if(spBrowser && spBrowser.IsEqualObject(m_spWebBrowser)) {
// ...
}

关于c++ - 将对象与 IDispatch 进行比较以仅获取主框架 (BHO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com