开始下载事件 Internet Explorer 插件

Begin download event internet explorer addon

在我的 Internet Explorer 插件中,我想检测用户何时开始下载文件,我有 FileDownload 事件,但它不会在用户下载文件时触发,但在导航时触发。

为了展示场景,我创建了一个小型控制台应用程序(如果您想在计算机上测试它):

  1. 添加对 SHDocVw dll 的引用(位于 C:\Windows\System32
  2. 使用以下代码创建控制台应用程序
  3. 按照我在下面写的那样,让您的应用程序与 Internet Explorer 交互。

代码:

    static void Main(string[] args)
    {
        SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
        object Empty = 0;
        object URL = "http://www.orimi.com/pdf-test.pdf";
        IE.BeforeNavigate2 += WebBrowser_BeforeNavigate21;
        IE.FileDownload += IE_FileDownload;
        IE.Visible = true;
        Thread.Sleep(60000);
        IE.Quit();
    }

    public void OnBeforeNavigate2(object sender, ref object URL,
                                      ref object Flags, ref object Target,
                                      ref object PostData, ref object Headers,
                                      ref bool Cancel)
    {
        Console.WriteLine("BeforeNavigate2 fired!");
    }

    private static void IE_FileDownload(bool ActiveDocument, ref bool Cancel)
    {
        Console.WriteLine($"{ActiveDocument} {DateTime.Now}");
        Cancel = true;

    }

启用 IE 与应用交互:

1.1 在inernet explorer中打开"Internet Options" 1.2 取消选中 "Advance" 选项卡

下标记的复选框

可以通过 BeforeNavigate2 事件完成,例如:

SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
IE.BeforeNavigate2 += IE_BeforeNavigate2;

当用户下载文件时调用以下方法:

static void IE_BeforeNavigate2(object pDisp, ref object URL, 
ref object Flags, ref object TargetFrameName, ref object PostData, 
ref object Headers, ref bool Cancel)
{
    Console.WriteLine("Event: IE_BeforeNavigate2");
}