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); 重新启动程序,这次注册表更改在我想要的两个方向上生效,而不仅仅是第一次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |