C#WebBrowrse攔截下載對話方塊

來源:互聯網
上載者:User

標籤:代碼   exce   tac   iunknown   lin   private   ace   ring   manager   

        為了實現這個功能,可算是折騰不少時間,網上搜素出來的結果基本都是如何屏蔽警告對話方塊。後來請教一個技術大牛(程式員之窗的主要作者Starts_2000),他用C++實現了,他嘗試了下C#也沒有解決,就忙其他的去,大牛時間一般都比較寶貴,後來我就將就用那個C++動態庫,那個時候我測試環境是 win7 64位 +vs2013,後來系統內容變化成 win10 +vs2015,突然就不好使了,趕緊重新編譯C++源碼,各種錯誤,感覺怎麼這麼不穩定。 怎麼辦?總不能再讓別人幫忙,下次環境變化了繼續問別人?  這就要求自己必須用C#實現, 好了 下面進入主題。

WebBrowser請求一個地址,比如http://download.easyicon.net/png/568613/48/ 會出現:

需要達到的目的:在彈出上面對話方塊之前能加入自己的代碼進行控制。如

 

為了實現這個功能網上找了些資料,發現有些協助的地址:

http://stackoverflow.com/questions/13362922/windows-forms-webbrowswer-control-with-idownloadmanager

 

遇到相同問題的有下面2個連結:

https://q.cnblogs.com/q/57083/

http://stackoverflow.com/questions/32513190/dllimportregistercallbackpbc-url-and-bindmonikertostreampmk-pbc

 

看完這些文檔後,我遇到和他們一樣的困擾.主要有下面幾個問題

1 找不到完整程式碼範例,只能東拼西湊的看看

2 在Download方法裡面斷點不進去,當然也就沒有攔截的效果.

3 希望不是所有的下載都需要攔截,有些用IE內建的功能進行下載。

第一個問題: 自己搜尋些代碼加以整理

第二個問題: 我發現主要是自己當時介面定義出錯

[ComImport, Guid("6d5140c1-7436-11ce-8034-00aa006009fa"), 
InterfaceType(ComInterfaceType.InterfaceIsIUnknown), ComVisible(false)]    public interface IServiceProvider    {        [return: MarshalAs(UnmanagedType.I4)]        [PreserveSig]        int QueryService(ref Guid guidService,   ref Guid riid,  
                         /*[MarshalAs(UnmanagedType.Interface)]*/   IntPtr ppvObject);    }

刪除注釋部分即可,如果還有不進斷點的請參照完整原始碼。

第三問題 需要系統API,也有不少人不知道怎麼定義這個API,比如上面連結就有個老外再問, API定義如下:

internal class API    {        [DllImport("ole32.dll")]        internal static extern int CreateBindCtx(uint reserved, out IBindCtx ppbc);        [DllImport("ole32.dll")]        internal static extern int RegisterCallback(IBindCtx pbc, Uri url);        [DllImport("ole32.dll")]        internal static extern int BindMonikerToStream(IMoniker pmk, IBindCtx ppbc);    }
 測試發現 只需要調用 第二個或者第三個API即可實現IE內建下載。
 
部分代碼如下:
        private void DownLoadDemo()        {            try            {                DownLoadWebBrowser DownLoadWebBrowser = new DownLoadWebBrowser();                DownLoadWebBrowser.FileDownloading += DownLoadWebBrowser_FileDownloading;                DownLoadWebBrowser.Navigate(downLoadUrl);            }            catch (Exception)            {                throw;            }        }        private void DownLoadWebBrowser_FileDownloading(object sender, FileDownloadEventArgs e)        {            string info = string.Format("{0},是否繼續", e.Url.ToString());            bool downLoad = MessageBox.Show(info, "請選擇", MessageBoxButtons.YesNo,                MessageBoxIcon.Question) == DialogResult.No;            e.Cancel = downLoad;        } 

完整代碼下載。

原始碼除了攔截下載,其他的一些功能(屏蔽對話方塊、JS和C#代碼互相調用,以及IE版本等等)也附帶上了,主要是之前寫的,就懶的去掉。

C#WebBrowrse攔截下載對話方塊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.