2012-07-08 295 views
0

我尝试使用c#程序更改代理服务器地址。ProxyEnable注册表项不会更改...?

[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; 
    bool settingsReturn, refreshReturn; 

    void SetProxy() 
    { 
     RegistryKey RegKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); 
     RegKey.SetValue("ProxyServer", "192.168.1.1:8082"); 
     RegKey.SetValue("ProxyEnable", 1); 

     settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); 
     refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); 
    } 

的第一件事是我不能找到注册表ProxyServer键,当我创造了它,仍然不解决问题。 当我尝试在我的电脑中手动输入时,我发现Internet Explorer仍未使用代理服务器。它表明我自己在whatismyip.com

的ip我不明白为什么它是我试图重新安装操作系统,甚至发生..问题依然存在 那么,有没有解决办法?

+0

[在C#编程设置浏览器代理设置(可能重复http://stackoverflow.com/questions/197725/programmatically-set-browser- proxy-settings-in-c-sharp) – EricLaw 2013-10-08 21:42:40

回答

0

从MSDN ...

 
Regedit4 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] 
"MigrateProxy"=dword:00000001 
"ProxyEnable"=dword:00000001 
"ProxyHttp1.1"=dword:00000000 
"ProxyServer"="http://ProxyServername:80" 
"ProxyOverride"="" 

,但要设置代理服务器值等; RegKey.SetValue(“ProxyServer”,“192.168.1.1:8082”);

没有“http://”...你试过了吗?

此外,请确保Internet Explorer exe文件已被关闭(检查任务栏上运行的应用程序列表)

还有最后一两件事;您是否从其他浏览器设置代理选项?它工作正常吗?

0

你在使用什么操作系统? 32位或64位?

也许你有一个64位的Windows,但你正在运行一个32位程序来更改注册表?在这种情况下,由于Windows有partly separate 32-bit and 64-bit registries,您可能会遇到问题。

+0

我正在使用32位windows7 – 2012-07-09 02:53:24

1

这样做,您的欢迎。无需关闭IE要么因为它会刷新会议:

public const int INTERNET_OPTION_REFRESH = 37; 
    private const int INTERNET_OPTION_END_BROWSER_SESSION = 42; 
    public const int INTERNET_OPTION_SETTINGS_CHANGED = 39; 

    [DllImport("wininet.dll", SetLastError = true)] 
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); 


    public void RefreshBrowserSettings() 
    { 
     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); 
     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); 
    } 

public void SetProxy(String Proxy, String Port, bool enabled = true) 
    { 
     string proxy = Proxy + ":" + Port; 
     string key = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; 
     RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(key, true); 

     if (Proxy != "") 
     { 
      RegKey.SetValue("ProxyServer", proxy); 
     } 

     if (enabled && Proxy != "") 
     { 
      RegKey.SetValue("ProxyEnable", 1); 
     } 
     else 
     { 
      RegKey.SetValue("ProxyEnable", 0); 
     } 

     RefreshBrowserSettings(); 

    }