c#.NET 开发BHO插件,FileDownload事件如何响应?怎样能够阻止对应的下载对话框的出现,使得IE能够继续导航

huxiaohuangcheng 2008-09-02 09:37:53
本人在用c#开发IE的BHO插件,实现从数据库中读入URL,依次自动实现访问,但遇到个问题,当url代表的是一个“下载文件的url”时,IE会自动跳出下载对话框,请问在这种情况下我怎样实现持续自动化IE?对此我采用的两个方法均不奏效
1:通过定义SHDocVw.WebBrowser接口的FileDownload事件响应,当有文件下载时,自动实现文件保存到默认文件夹。但编程实现时发现FileDownload时间根本就没有触发/或者根本没有调用此事件的响应消息(消息框没有弹出,如下)。而DocumentComplete等事件均可正确触发和响应。
代码如下:

//定义IObjectWithSite接口
[
ComVisible(true),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352")
]

public interface IObjectWithSite
{
[PreserveSig]
int SetSite([MarshalAs(UnmanagedType.IUnknown)]object site);
[PreserveSig]
int GetSite(ref Guid guid, out IntPtr ppvSite);
}



//接口功能实现
[ComVisible(true),
Guid("8a194578-81ea-4850-9911-13ba2d71efbd"),
ClassInterface(ClassInterfaceType.None)
]
public class BHO:IObjectWithSite
{
WebBrowser webBrowser;
public void OnWebBrowser_FileDownload(ref bool Cancel)
{
System.Windows.Forms.MessageBox.Show("这是一个下载文件"); //此处无任何响应
webBrowser.Quit();
}
#region BHO Internal Functions
public static string BHOKEYNAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
[ComRegisterFunction]
public static void RegisterBHO(Type type){//注册此组件//}
[ComUnregisterFunction]
public static void UnregisterBHO(Type type){//解除此组件//}
public int SetSite(object site)
{
if (site != null)
{
webBrowser = (WebBrowser)site;
webBrowser.FileDownload+=new DWebBrowserEvents2_FileDownloadEventHandler(this.OnWebBrowser_FileDownload);//挂载事件处理
}
else
{
webBrowser.FileDownload -= new DWebBrowserEvents2_FileDownloadEventHandler(this.OnWebBrowser_FileDownload);
webBrowser = null;
}
return 0;
}
public int GetSite(ref Guid guid, out IntPtr ppvSite){//getsite实现}

...全文
858 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
一国之军 2012-03-07
  • 打赏
  • 举报
回复
有没有好的例子啊??
iaidr421 2012-02-20
  • 打赏
  • 举报
回复
我的解决办法是在保存对话框打开后用sendkey 发送alt-s的键盘指令 但是有一个问题是系统不能锁定,锁定的话就不好用了
杨友山 2011-11-04
  • 打赏
  • 举报
回复
苍天啊,我现在也遇到这个问题了,怎么办呐???
zhjb1 2009-10-04
  • 打赏
  • 举报
回复
我在ASP里面做过类似的工作,试将文档的所有读出来,而后分段判断是URL还是文档。你可以参照这个思路试试。因为我的C#应用还处于深入学习阶段。
qshzf 2008-10-22
  • 打赏
  • 举报
回复
up
chenzl79 2008-10-21
  • 打赏
  • 举报
回复
兄弟,不知道你的这个问题解决了没有....

我现在也是用 C# 弄 BHO 做 IE

也是遇到这样的题..

不管,你是否解决:

希望你加我QQ :695331226

希望相交流学习
LQknife 2008-09-03
  • 打赏
  • 举报
回复
微软想把什么都封装在.net下 可是又不不把功能彻底化
优途科技 2008-09-03
  • 打赏
  • 举报
回复
关注一下.顶一下!
浮生若梦丶 2008-09-02
  • 打赏
  • 举报
回复
up
huxiaohuangcheng 2008-09-02
  • 打赏
  • 举报
回复
微软帮助与支持里面有一篇文章BUG: FileDownload event handler in .NET WebBrowser host is never called,提到了此问题http://support.microsoft.com/kb/325204/en-us/
但感觉在c#中实现起来非常困难,不知道哪位高手有其他办法?
我现在需要的功能是在IE开始导航时辨别出“链接URL”是否是下载链接,如果是则停止此url导航,继续浏览下一个url。响应Iwebbrowser的什么事件能够实现此功能?
huxiaohuangcheng 2008-09-02
  • 打赏
  • 举报
回复
楼上的再问下,那通过什么方式能够区分出url是正常的浏览网页还是对应于下载事件呢?
周公 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huxiaohuangcheng 的回复:]
微软帮助与支持里面有一篇文章BUG: FileDownload event handler in .NET WebBrowser host is never called,提到了此问题http://support.microsoft.com/kb/325204/en-us/
但感觉在c#中实现起来非常困难,不知道哪位高手有其他办法?
我现在需要的功能是在IE开始导航时辨别出“链接URL”是否是下载链接,如果是则停止此url导航,继续浏览下一个url。响应Iwebbrowser的什么事件能够实现此功能?
[/Quote]
这个想法在我2006年做一个电子杂志项目的时候就想到了,我们当时的想法就是当用户在浏览器点击的超级连接是电子杂志下载地址时就启动我们自己开放的电子杂志阅读器下载,否则依然交由IE处理。

后来发现问题很多,强程序命名集、GUID、安全还有权限一堆设置,挺麻烦的。最后项目取消了,那个东西也是半途而废了。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧