• 解决 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的。

  • 相关阅读:
    mysql错误:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
    MyBatis中id回填的两种方式
    springboot项目打war包流程
    Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include springcloudstarterloadbalancer?
    idea thymeleaf页面变量报错解决
    项目编码流程
    逻辑删除
    mysql 连接url中需要添加useUnicode=true&characterEncoding=UTF8
    【转】[wp7应用内截图]Taking a screenshot from within a Silverlight #WP7 application
    Wp7客户端与Webservice的数据传输,json的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/soundcode/p/10179244.html
Copyright © 2020-2023  润新知