用自己所有分,求问:VC中使用webbrowser,我想拦截下载对话框,程序指定默认下载路径,取出文件名,有请jiangsheng蒋晟大哥继续帮忙,谢谢大家
描述:
之前我发过一个求问此问题的帖子了,困扰我一个月了也没有解决,现提供网址供大家参考一下,希望大家能够多多指点,我仅有190分,全部奉上,项目就差这一块了,希望大家能够帮忙,先谢谢大家了。http://topic.csdn.net/u/20091028/16/db45edcc-bc4a-42e7-950a-93c0c78f0a01.html
首先感谢:tttyd(雪影)、jiangsheng(蒋晟)、ljz888666555(终于找到了)三位的热心帮助,希望本帖可以得到你们的继续关注。
我现在把我的问题再描述一遍:
我的项目中用到了webbrowser这个控件,我现在想实现下载文件时隐藏下载保存对话框,那个站点是我们自己做得,我只是想把下载的文件存到固定路径,并要获取其文件名,然后我的程序要在下载完毕之后加载那个文件,现在不知道怎么屏蔽那个下载对话框,而且也不知道怎么得到那个被下载文件的文件名。功能有点像风行软件,点击一个节目之后,它会把bt下载的文件自动保存在它下载所在目录,然后自动打开那个下载任务,整个过程没有出现下载,另存为的对话框。我不用像迅雷,flashget一样拦截所有的下载事件。
经过上个帖子我得知,因为我只是用WebBrowser打开我自己的站点,所以我不需要实现全局下载器IDownloadManager接口,jiangsheng(蒋晟)大哥说:只抓自己的程序的下载的话不用注册到全局的。在容器的IOleClientSite实现这里添加就行了。我对COM不熟悉,我不知道如何实现IOleClientSite,实现之后如何使用,jiangsheng(蒋晟)大哥说:http://blog.joycode.com/jiangsheng/archive/2007/07/03/104995.joy 和这里实现INewWindowManager的方法一样。我也认真读了,整个代码的思路我可以读懂,但是让我移植我就不会了,请大家不要嘲笑我,真诚虚心向大家请教,希望能够得到进一步指点,如果能得到一个拦截下载对话框的demo的话,那就更感激不尽了(虽然这个要求比较过分,但还是妄想了一下)要是有demo可以发到ju_by@126.com这个邮箱啊:)
我尽然无权使用大于100分的可用分,只能开100分的帖子了,我会在问题解决之后,另开帖子,把剩余的90分奉上,谢谢
解决方案1:
在你的WEBBrowser控件的宿主对话框里响应newwindows3事件通知(你点击一个链接后就会发出这个事件,是用来在新窗口中打开你点击的链接网页),然后在NewWindow3的处理函数中就可以获取到你点击的链接地址(我想这个地址就是你想拦截的地址吧),然后*Cancel = true;(这样就不会弹出默认的下载对话框了
void CwebbrowserDlg::NewWindow3Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{
// TODO: 在此处添加消息处理程序代码
//可以对bstrURL作一下判断看是文件链接还是网址
MessageBox(bstrUrl);
*Cancel = true;
}
可不可以尝试一下自己用 CInternetFile,读取网络文件,再写入本地。用这个下图片是可以的,别的文件应该也可行.
解决方案3:同意!! 解决方案4:
呃,友情UP等专家。
解决方案5:可以屏蔽webbrowser的右键