Ajit Hegde
Ajit Hegde

Reputation: 552

ProxyEnable registry key wont change...?

I try to use c# program to change proxy server address.

    [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);
    }

First thing is I cant find ProxyServer key in registry and when I created it and still it doesn't solve the problem. And when I try to enter manually in my pc and I found that still proxy server is not used by internet explorer. And it shows my own ip in whatismyip.com

I don't understand why it is happening even I tried to reinstall the os.. problem still exists So is there any solution?

Upvotes: 0

Views: 2716

Answers (3)

Aaron Gibson
Aaron Gibson

Reputation: 1378

This does it, your welcome. No need to close IE either as it will refresh the session:

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();

    }

Upvotes: 1

user9876
user9876

Reputation: 11102

What OS are you using? 32-bit or 64-bit?

Maybe you have a 64-bit Windows, but you're running a 32-bit program to change the registry? In that case, you might have issues due to Windows having partly separate 32-bit and 64-bit registries.

Upvotes: 0

Lost_In_Library
Lost_In_Library

Reputation: 3483

From 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"=""

but you are setting Proxy server value like; RegKey.SetValue("ProxyServer", "192.168.1.1:8082");

Without "http://"... Did you tried with that ?

Also, make sure internet explorer exe has been already closed ( check taskbar running app list )

And one last thing; Did you set proxy options from anorher browsers ? Does it work correctly?

Upvotes: 0

Related Questions