加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 设置全局代理设置后无法刷新窗口

发布时间:2020-12-15 22:00:42 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 Windows注册表启用/禁用Windows全局代理(在Internet选项中).如果我设置了值,我没有任何问题但刷新设置.搜索后我在SO上找到了一个提供代码的问题.但现在的问题是,在应用程序的每个会话中,它只能运行一次.即它第一次工作,如果你想让它再次工作,
我正在尝试使用 Windows注册表启用/禁用Windows全局代理(在Internet选项中).如果我设置了值,我没有任何问题但刷新设置.搜索后我在SO上找到了一个提供代码的问题.但现在的问题是,在应用程序的每个会话中,它只能运行一次.即它第一次工作,如果你想让它再次工作,你必须重新运行该应用程序.任何想法可能是什么问题???这是代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Runtime.InteropServices;

namespace SystemProxyToggle
{
    public partial class Form1 : Form
    {
        [DllImport("wininet.dll")]
        public static extern bool InternetSetOption(IntPtr hInternet,int dwOption,IntPtr lpBuffer,int dwBufferLength);
        public const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
        public const int INTERNET_OPTION_REFRESH = 37;
        static bool settingsReturn,refreshReturn;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender,EventArgs e)
        {
            queryStatus();
        }

        private void btnToggle_Click(object sender,EventArgs e)
        {
            toggleStatus();
            queryStatus();
        }

        private void queryStatus()
        {
            RegistryKey registry = Registry.CurrentUser.OpenSubKey("SoftwareMicrosoftWindowsCurrentVersionInternet Settings",true);
            int status = (int)registry.GetValue("ProxyEnable");
            if (status == 0)
            {
                lblStatus.Text = "Proxy Is Disabled";
                lblStatus.ForeColor = Color.Maroon;
            }
            else
            {
                lblStatus.Text = "Proxy Is Enabled";
                lblStatus.ForeColor = Color.Green;
            }

            //I added this after I encountered the problem
            //though I don't that this is the problem
            registry.Close();
        }

        private void toggleStatus()
        {
            RegistryKey registry = Registry.CurrentUser.OpenSubKey("SoftwareMicrosoftWindowsCurrentVersionInternet Settings",true);
            int status = (int)registry.GetValue("ProxyEnable");
            if (status == 1)
            {
                registry.SetValue("ProxyEnable",0);
            }
            else
            {
                registry.SetValue("ProxyEnable",1);
            }
            //Refresh System Settings
            settingsReturn = InternetSetOption(IntPtr.Zero,INTERNET_OPTION_SETTINGS_CHANGED,IntPtr.Zero,0);
            refreshReturn = InternetSetOption(IntPtr.Zero,INTERNET_OPTION_REFRESH,0);

            //I added this after I encountered the problem
            registry.Close();
        }
    }
}

解决方法

对于任何坚持这个问题的人来说,奇怪的事似乎对我有用.

我只是删除/评论了所有对InternetSetOption()的调用

//settingsReturn = InternetSetOption(IntPtr.Zero,0);
//refreshReturn = InternetSetOption(IntPtr.Zero,0);

重新启动程序,这次注册表更改在我想要的两个方向上生效,而不仅仅是第一次.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读