我試圖使用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("Software\\Microsoft\\Windows\\CurrentVersion\\Internet 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("Software\\Microsoft\\Windows\\CurrentVersion\\Internet 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, IntPtr.Zero, 0);
//I added this after I encountered the problem
registry.Close();
}
}
}
我不認爲我很理解你的問題,我只是執行你的代碼,它似乎按預期工作。我運行它,顯示我的代理被禁用。我按下按鈕,代理被啓用,再次按下它,它被禁用..什麼似乎是這個問題? – Dayan
同樣在這裏,運行代碼沒有問題。 – tweellt
一個完全瘋狂的猜測,因爲其他人可以成功地運行你的程序,你有沒有安裝任何軟件來保護你的註冊表?防病毒?也許一些域控制的東西?我曾經有一個奇怪的問題,即我的IE首頁被重置,無論我做了什麼,都以各種方式編輯註冊表。事實證明,這是因爲它通過了我的電腦所在的域。 – Heki