解決 winform打開網頁 和WebBrowser打開連接360誤報攔截的問題

如下方法我已經在本身電腦上驗證經過,其餘電腦並未測試,請廣大讀者自行驗證並反饋,若是有更好的方法請指教。html

在winform中若是使用這種方法彈出網頁,例如這樣web

Process.start("http://www.xgjxc.top");

或者另外若是winform中嵌入了一個webbrowser控件,加載了一個網頁,例如這樣shell

this.webBrowser1.Navigate("http://www.xgjxc.top/home.html「);

網頁中有個超連接,例如這樣瀏覽器

<a href="http://www.xgjxc.top/post/15.html" target="_blank">小狗進銷存功能模塊介紹 (2015-05-10)</a>

那麼點擊這個超連接會自動打開一個瀏覽器窗口post

 

若是按照上面的方法來打開網頁,十有八九會出現如下的畫面: 測試

技術分享

 

不得不說,360愈來愈流氓了,他徹底不看軟件有無惡意特徵碼,也徹底不看要打開的網頁有無惡意內容,只要你要打開一個網頁,則攔截之。this

另一個就是我把程序用VS自帶打包打包了一下,碰到沒有安裝.Net的客戶機,則自動從官方位置下載安裝包進行安裝,這個時候360照樣攔截不誤,以下圖:code

一共攔截兩次,.Net包攔截一下,簡體中文語言包攔截一次,打包的時候都是選的」從官方未知下載組件「,不得不說,360就是一個大傻逼。orm

技術分享

 

下面進入正題,說下怎麼解決打開網頁這件事。htm

winform中點擊按鈕直接打開網頁,採用下面方案:

核心代碼:

public partial class Home : Form
    {
        [DllImport("shell32.dll")]
        public extern static IntPtr ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
        public enum ShowWindowCommands : int
        {
            SW_HIDE = 0,
            SW_SHOWNORMAL = 1,
            SW_NORMAL = 1,
            SW_SHOWMINIMIZED = 2,
            SW_SHOWMAXIMIZED = 3,
            SW_MAXIMIZE = 3,
            SW_SHOWNOACTIVATE = 4,
            SW_SHOW = 5,
            SW_MINIMIZE = 6,
            SW_SHOWMINNOACTIVE = 7,
            SW_SHOWNA = 8,
            SW_RESTORE = 9,
            SW_SHOWDEFAULT = 10,
            SW_MAX = 10
        }
        public Home()
        {
            InitializeComponent();
        }
}

  而後點擊事件中的代碼:

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ShellExecute(0, @"open", @"http://www.xgjxc.top", null, null, (int)ShowWindowCommands.SW_NORMAL);
        }

這樣的話360就不在會攔截了。

同理,若是是點擊webbrowser中的鏈接,思路是這樣的,首先攔截這個點擊動做,不讓他彈出網頁,而採用上面的方法進行彈出,則就會跳過攔截了。

代碼以下:

加載網頁

private void Home_Load(object sender, EventArgs e)
        {
            this.webBrowser1.Navigate("http://www.xgjxc.top/home.html");
        }

 

註冊NewWindow事件:  

private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
ShellExecute(0, @"open", this.webBrowser1.StatusText.ToString(), null, null, (int)ShowWindowCommands.SW_NORMAL);
e.Cancel = true;
}

首先e.Cancel=true 讓點擊動做失效,而後this.webBrowser1.StatusText.ToString()獲取到剛纔點擊的鏈接,StatusText是狀態欄文字,咱們知道瀏覽器若是鼠標移動到鏈接上,狀態欄是會顯示鏈接URL的。

 

但願能夠幫到一樣受到360困擾的朋友。

相關文章
相關標籤/搜索