用atl写的BHO,无法获得浏览器的父窗口句柄,解决方法
用atl写的BHO,无法获得浏览器的父窗口句柄,急!!!
我用ATL创建一个BHO,然后试图在setsite中获得父框架窗口,代码如下:
CComQIPtr <IWebBrowser2,&IID_IWebBrowser2> m_spWebBrowser2;
m_spWebBrowser2=pUnkSite;
if (m_spWebBrowser2==NULL)
return E_INVALIDARG;
IOleWindow *spOleWindow;
if (SUCCEEDED(pUnkSite-> QueryInterface(IID_IOleWindow,(LPVOID*)&spOleWindow)))
{
spOleWindow-> GetWindow(&m_hwndParent);
spOleWindow-> Release();
}
浏览器指针可以获得,可是spOleWindow总是为空,这是为什么呢?
后来我又在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Toolbar\下面写入CLSID,结果还是不行,请帮帮我!
------解决方案--------------------
BHO 's are usually run by standalone InternetExplorer. It is NOT an ActiveX controland does not implement IOleWindow. Instead, use IWebBrowser2::get_HWND
------解决方案--------------------
QueryInterface不成功,说明不支持那个接口
我用ATL创建一个BHO,然后试图在setsite中获得父框架窗口,代码如下:
CComQIPtr <IWebBrowser2,&IID_IWebBrowser2> m_spWebBrowser2;
m_spWebBrowser2=pUnkSite;
if (m_spWebBrowser2==NULL)
return E_INVALIDARG;
IOleWindow *spOleWindow;
if (SUCCEEDED(pUnkSite-> QueryInterface(IID_IOleWindow,(LPVOID*)&spOleWindow)))
{
spOleWindow-> GetWindow(&m_hwndParent);
spOleWindow-> Release();
}
浏览器指针可以获得,可是spOleWindow总是为空,这是为什么呢?
后来我又在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Toolbar\下面写入CLSID,结果还是不行,请帮帮我!
------解决方案--------------------
BHO 's are usually run by standalone InternetExplorer. It is NOT an ActiveX controland does not implement IOleWindow. Instead, use IWebBrowser2::get_HWND
------解决方案--------------------
QueryInterface不成功,说明不支持那个接口