How to change LAN Settings (proxy configuration) programmatically

后端 未结 5 663
萌比男神i
萌比男神i 2021-02-09 01:11

I am writing a program to automatically switch my proxy address based on the network I am connected to.

I have so far got everything to work except the part that I have

5条回答
  •  孤街浪徒
    2021-02-09 01:35

    I am answering because I am not allowed to comment on answers. I would like to point out a difference between manipulating registry vs using InternetSetOptionAPI. If you directly poke registry to change proxy settings then browsers like Chrome that depends on WinInet proxy configuration won't immediately pickup the new settings but if you change using InternetSetOptionAPI the new settings will be used immediately. This is my experience. I did not go into the details to find out what can be done to pickup the settings after manipulating the registry.

    EDIT: In order to refresh the WinInet proxy settings you can do a simple PInvoke of InternetSetOption API as follows

    internal class InternetSetOptionApi
    {
        [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;
    
        public static void RefreshWinInetProxySettings()
        {
            // These lines implement the Interface in the beginning of program 
            // They cause the OS to refresh the settings, causing IP to realy update
            InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
            InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
        }
    }
    

    Source : Programmatically Set Browser Proxy Settings in C#

提交回复
热议问题