如下方法我已經在本身電腦上驗證經過,其餘電腦並未測試,請廣大讀者自行驗證並反饋,若是有更好的方法請指教。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困擾的朋友。