关于自定义webbroswer,禁止弹出文件下载窗口的方法
2009-12-14 13:25
519 查看
前段时间我在逛CSDN的时候,看见有些人提出上述问题,而回复总是不甚理想,我本是是一个潜水者,但是不希望让更多的人为这个问题而纠结,我把实现的方法给需要帮助的人说说吧。
其实说来很简单,其实就是自己实现webbrowser的IDownloadManager接口中的Download函数即可,具体如何操作请按下面几步实现:
1 在google搜索下ie55_lib.exe,运行之,便可在得到我们需要的接口定义的头文件:downloadmgr.h。
2 将该头文件添加进自己的工程,然后在引用webbroswer的窗口类中集成里面的IDownloadManager和IServiceProvider接口。其中窗口类可以使CWnd或者CDialog,例子如:
class CMyBrowserWnd :
, public IDownloadManager
{
};
3 然后重载QueryInterface方法,即让系统查询接口时调用我们重载的方法进行查询。具体代码可参考:
HRESULT CBrowserWnd::QueryInterface(REFIID riid, void **ppv)
{
if (IsEqualIID(riid,IID_IServiceProvider))
{
*ppv = static_cast<IServiceProvider*>(this);
return S_OK;
}
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
}
4 接着重载QueryService方法,即但webbroswer加载服务的时候,先来我们重载的QueryService方法查询,让webbroswer加载我们定制的下载管理服务接口即可,代码可参考:
HRESULT CBrowserWnd::QueryService( REFGUID guidService,REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject)
{
if(guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
{
*ppvObject = static_cast<IDownloadManager*>(this);
return S_OK;
}
else
{
*ppvObject = NULL;
return E_NOINTERFACE;
}
}
5 重载IDownloadManager的Download的方法,具体实现如下:
STDMETHODIMP Download(IMoniker* pmk,
IBindCtx* pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO* pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP )
{
return S_OK;
}
本处为方便所以简单的返回S_OK,如需要具体实现,请自行实现,但是这样也即可屏蔽下载窗口,即默认为不下载。
本篇只是为大家示范该如何实现此需要,其间具体的机制和原理,请参看MSDN,本人就不多说了。
其实说来很简单,其实就是自己实现webbrowser的IDownloadManager接口中的Download函数即可,具体如何操作请按下面几步实现:
1 在google搜索下ie55_lib.exe,运行之,便可在得到我们需要的接口定义的头文件:downloadmgr.h。
2 将该头文件添加进自己的工程,然后在引用webbroswer的窗口类中集成里面的IDownloadManager和IServiceProvider接口。其中窗口类可以使CWnd或者CDialog,例子如:
class CMyBrowserWnd :
, public IDownloadManager
{
};
3 然后重载QueryInterface方法,即让系统查询接口时调用我们重载的方法进行查询。具体代码可参考:
HRESULT CBrowserWnd::QueryInterface(REFIID riid, void **ppv)
{
if (IsEqualIID(riid,IID_IServiceProvider))
{
*ppv = static_cast<IServiceProvider*>(this);
return S_OK;
}
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
}
4 接着重载QueryService方法,即但webbroswer加载服务的时候,先来我们重载的QueryService方法查询,让webbroswer加载我们定制的下载管理服务接口即可,代码可参考:
HRESULT CBrowserWnd::QueryService( REFGUID guidService,REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject)
{
if(guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
{
*ppvObject = static_cast<IDownloadManager*>(this);
return S_OK;
}
else
{
*ppvObject = NULL;
return E_NOINTERFACE;
}
}
5 重载IDownloadManager的Download的方法,具体实现如下:
STDMETHODIMP Download(IMoniker* pmk,
IBindCtx* pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO* pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP )
{
return S_OK;
}
本处为方便所以简单的返回S_OK,如需要具体实现,请自行实现,但是这样也即可屏蔽下载窗口,即默认为不下载。
本篇只是为大家示范该如何实现此需要,其间具体的机制和原理,请参看MSDN,本人就不多说了。
相关文章推荐
- showModelDialog弹出文件下载窗口的使用示例
- 关于华为网盘的100个文件下载躲避方法
- 下载文件时,不在浏览其中直接打开, 而是弹出另存为窗口
- jquery之与struts2整合异步上传文件时弹出下载对话框的解决方法
- 关于jsp网页弹出窗口[很多种方法......]
- 文件下载时,只弹出下载框,不在页面打开的方法。
- springmvc Excel文件上传,使用ajaxSubmit方法进行文件上传,使用弹出层弹出一个框(jquery layer),点击进行下载
- showmodaldialog弹出的窗口里,不能实现文件的下载解决方案
- 禁止弹出“您查看的网页正在试图关闭窗口。是否关闭此窗口”的屏蔽方法
- powerdesigner 15打开pdm文件弹出安装打印机窗口的解决方法
- 关于layer.open弹出层单击事件如何调用父窗口方法的说明
- 关于 文件下载--------代码没有报错,又不弹出下载框,执行下载无反应的问题
- 关于jsp网页弹出窗口[很多种方法......]
- 【转】AUTOCAD保存文件时不弹出“保存窗口”的解决方法
- 资源管理器双击弹出新窗口或普通文件列表窗口双击弹出资源管理器的解决方法
- 关于inputStream.available()与HttpURLConnection.getContentLength()方法获取下载文件的大小
- 关于Struts2文件下载时,下载方法被重复执行的问题
- 关于inputStream.available()方法获取下载文件的总大小
- flex利用socket和c++通信进行文件下载,解决Error #2176: 某些动作(如显示弹出窗口的动作)只能通过用户交互来调用
- (判断url文件大小)关于inputStream.available()方法获取下载文件的总大小