怎样截获并处理IE的事件啊? 我的程序是一个ActiveX文档服务器,当用IE打开特定类型的文档时会嵌入到IE并打开文档。就像用IE打开word文档的效果一样。我想在我得程序里处理IE的open file事件和鼠标拖曳事件(拖曳文档到IE并打开),该怎么办阿? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 STDMETHODIMP CIEPlugCom::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr){ USES_CONVERSION; if(!pDispParams) return E_INVALIDARG; LPOLESTR lpURL=NULL; m_spWebBrowser2->get_LocationURL(&lpURL); switch(dispidMember) { case DISPID_BEFORENAVIGATE2: char *pURL; if(pDispParams->cArgs >=5&&pDispParams->rgvarg[5].vt==(VT_BYREF|VT_VARIANT)) { CComVariant varURL(*pDispParams->rgvarg[5].pvarVal); varURL.ChangeType(VT_BSTR); //转化要访问的网址为char *型 pURL=OLE2A(varURL.bstrVal); } //如果正要访问的网址为要被拦截的,则停止 //IDS_URL if(strstr(pURL,"microsoft.com")!=NULL) { *pDispParams->rgvarg[0].pboolVal=TRUE; MessageBox(NULL,"当前系统禁止浏览该页","警告",MB_ICONSTOP); return S_OK; } break; case DISPID_NAVIGATECOMPLETE2: break; case DISPID_DOCUMENTCOMPLETE: break; case DISPID_DOWNLOADBEGIN: break; case DISPID_DOWNLOADCOMPLETE: break; case DISPID_NEWWINDOW2: READYSTATE m_ReadyState; m_spWebBrowser2->get_ReadyState(&m_ReadyState); if(m_ReadyState!=READYSTATE_COMPLETE) { *pDispParams->rgvarg[0].pboolVal=TRUE; return S_OK; } else { *pDispParams->rgvarg[0].pboolVal=FALSE; return S_OK; } break; case DISPID_QUIT: break; default: break; } return S_OK;} 好像不是阿,IWebBrowser2好像只处理与浏览相关的几个事件 http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=190333如何注册自己的协议,在IE中点击就能直接打开对应的可执行程序,类似于微软的mms协议那样的。 是不是跟关联文件类型一样的? --------------------------------------------------------------- http://www.codeguru.com/atl/asyncpp.shtml Asynchronous Pluggable Protocol Implementation with ATL --------------------------------------------------------------- http://msdn.microsoft.com/workshop/networking/pluggable/overview/overview.asp 贴错了http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=53724MSDN Home > MSDN Web & Internet Samples > Component Development Objvw sample HRESULT CObjVw::SetClientSite(IOleClientSite *pClientSite) { HRESULT hr = S_OK; if(NULL != pClientSite) { ATLTRACE(_T("SetClientSite called\n")); m_spClientSite = pClientSite; // This AddRefs the client site // if null, existing client site is released } else { //REMOVE: _ASSERT(0 != m_dwAdviseCookie); _ASSERT(m_spWebBrowser != NULL); ATLTRACE(_T("SetClientSite NULL called\n")); //REMOVE: hr = AtlUnadvise( m_spWebBrowser, __uuidof(SHDocVw::DWebBrowserEvents2), m_dwAdviseCookie ); IDispEventImpl<0, CObjVw, &__uuidof(SHDocVw::DWebBrowserEvents2), &LIBID_OBJVWLib, 1, 0>::DispEventUnadvise(m_spWebBrowser); m_spWebBrowser.Release(); return S_OK; } try { IServiceProviderPtr spSP((LPOLECLIENTSITE)m_spClientSite); if(NULL == spSP) return hr; spSP->QueryService(__uuidof(SHDocVw::IWebBrowserApp), __uuidof(SHDocVw::IWebBrowser2), (void**)&m_spWebBrowser); //REMOVE: hr = AtlAdvise(m_spWebBrowser, GetControllingUnknown(), __uuidof(SHDocVw::DWebBrowserEvents2), &m_dwAdviseCookie); IDispEventImpl<0, CObjVw, &__uuidof(SHDocVw::DWebBrowserEvents2), &LIBID_OBJVWLib, 1, 0>::DispEventAdvise(m_spWebBrowser); } catch(...) { return S_FALSE; } return hr; } 是这样的,我想在我的程序里监视IE事件,比如当一个用户把一份文档拖到IE的地址栏时,我截获这个消息并为这份文档打开一个新的IE窗口。这样该怎么做啊? combobox内存泄漏 怎么用SendInput模拟按键? 使用双缓存显示位图,出现很怪的问题 帮帮忙~ 关于软件注册 关于tcp 所携带的 最大数据的问题 关于CRichEdit的几个问题 请问任务管理器中的 cisvc.exe 是个什么东东 ,我开启我的NetBee.exe 后,它占用的内存会一直增加!!!!! _RecordsetPtr=_Recordset*? 重金三百:IDataObject指针问题 保存网页上的表格为Excel文件如何实现? 在ActiveX中定义属性问题!
{
USES_CONVERSION;
if(!pDispParams)
return E_INVALIDARG;
LPOLESTR lpURL=NULL;
m_spWebBrowser2->get_LocationURL(&lpURL);
switch(dispidMember)
{
case DISPID_BEFORENAVIGATE2:
char *pURL;
if(pDispParams->cArgs >=5&&pDispParams->rgvarg[5].vt==(VT_BYREF|VT_VARIANT))
{
CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);
varURL.ChangeType(VT_BSTR);
//转化要访问的网址为char *型
pURL=OLE2A(varURL.bstrVal);
}
//如果正要访问的网址为要被拦截的,则停止
//IDS_URL
if(strstr(pURL,"microsoft.com")!=NULL)
{
*pDispParams->rgvarg[0].pboolVal=TRUE;
MessageBox(NULL,"当前系统禁止浏览该页","警告",MB_ICONSTOP);
return S_OK;
}
break;
case DISPID_NAVIGATECOMPLETE2:
break;
case DISPID_DOCUMENTCOMPLETE:
break;
case DISPID_DOWNLOADBEGIN:
break;
case DISPID_DOWNLOADCOMPLETE:
break;
case DISPID_NEWWINDOW2:
READYSTATE m_ReadyState;
m_spWebBrowser2->get_ReadyState(&m_ReadyState);
if(m_ReadyState!=READYSTATE_COMPLETE)
{
*pDispParams->rgvarg[0].pboolVal=TRUE;
return S_OK;
}
else
{
*pDispParams->rgvarg[0].pboolVal=FALSE;
return S_OK;
}
break;
case DISPID_QUIT:
break;
default:
break;
}
return S_OK;
}
如何注册自己的协议,在IE中点击就能直接打开对应的可执行程序,类似于微软的mms协议那样的。
是不是跟关联文件类型一样的?
---------------------------------------------------------------
http://www.codeguru.com/atl/asyncpp.shtml
Asynchronous Pluggable Protocol Implementation with ATL
---------------------------------------------------------------
http://msdn.microsoft.com/workshop/networking/pluggable/overview/overview.asp
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=53724MSDN Home > MSDN Web & Internet Samples > Component Development
Objvw sample
HRESULT CObjVw::SetClientSite(IOleClientSite *pClientSite)
{
HRESULT hr = S_OK;
if(NULL != pClientSite)
{
ATLTRACE(_T("SetClientSite called\n"));
m_spClientSite = pClientSite; // This AddRefs the client site
// if null, existing client site is released
}
else
{
//REMOVE: _ASSERT(0 != m_dwAdviseCookie);
_ASSERT(m_spWebBrowser != NULL);
ATLTRACE(_T("SetClientSite NULL called\n"));
//REMOVE: hr = AtlUnadvise( m_spWebBrowser, __uuidof(SHDocVw::DWebBrowserEvents2), m_dwAdviseCookie );
IDispEventImpl<0, CObjVw, &__uuidof(SHDocVw::DWebBrowserEvents2),
&LIBID_OBJVWLib, 1, 0>::DispEventUnadvise(m_spWebBrowser);
m_spWebBrowser.Release();
return S_OK;
}
try
{
IServiceProviderPtr spSP((LPOLECLIENTSITE)m_spClientSite);
if(NULL == spSP)
return hr;
spSP->QueryService(__uuidof(SHDocVw::IWebBrowserApp),
__uuidof(SHDocVw::IWebBrowser2), (void**)&m_spWebBrowser);
//REMOVE: hr = AtlAdvise(m_spWebBrowser, GetControllingUnknown(), __uuidof(SHDocVw::DWebBrowserEvents2), &m_dwAdviseCookie);
IDispEventImpl<0, CObjVw, &__uuidof(SHDocVw::DWebBrowserEvents2),
&LIBID_OBJVWLib, 1, 0>::DispEventAdvise(m_spWebBrowser);
}
catch(...)
{
return S_FALSE;
}
return hr;
}