zoukankan      html  css  js  c++  java
  • 解决 winform打开网页 和WebBrowser打开链接360误报拦截的问题

    以下方法我已经在自己电脑上验证通过,其他电脑并未测试,请广大读者自行验证并反馈,如果有更好的方法请指教。

    在winform中如果使用这种方法弹出网页,例如这样

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

    或者另外如果winform中嵌入了一个webbrowser控件,加载了一个网页,例如这样

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

    网页中有个超链接,例如这样

    <a href="http://www.xgjxc.top/post/15.html" target="_blank">小狗进销存功能模块介绍 (2015-05-10)</a>
    

    那么点击这个超链接会自动打开一个浏览器窗口

    如果按照上面的方法来打开网页,十有八九会出现以下的画面: 

    技术分享

    不得不说,360越来越流氓了,他完全不看软件有无恶意特征码,也完全不看要打开的网页有无恶意内容,只要你要打开一个网页,则拦截之。

    另外一个就是我把程序用VS自带打包打包了一下,碰到没有安装.Net的客户机,则自动从官方位置下载安装包进行安装,这个时候360照样拦截不误,如下图:

    一共拦截两次,.Net包拦截一下,简体中文语言包拦截一次,打包的时候都是选的”从官方未知下载组件“,不得不说,360就是一个大傻逼。

    技术分享

    下面进入正题,说下怎么解决打开网页这件事。

    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困扰的朋友。

  • 相关阅读:
    centos 安装 TortoiseSVN svn 客户端
    linux 定时任务 日志记录
    centos6.5 安装PHP7.0支持nginx
    linux root 用户 定时任务添加
    composer 一些使用说明
    laravel cookie写入
    laravel composer 安装指定版本以及基本的配置
    mysql 删除重复记录语句
    linux php redis 扩展安装
    linux php 安装 memcache 扩展
  • 原文地址:https://www.cnblogs.com/wohexiaocai/p/9545487.html
Copyright © 2011-2022 走看看