c # - Sådan ændres LAN-indstillinger (proxy-konfiguration) programmatisk

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver et program til automatisk at skifte min proxyadresse baseret på det netværk, jeg er forbundet med.


Jeg har hidtil fået alt til at arbejde, undtagen den del, jeg har fremhævet nedenfor.


LAN-indstillingsdialog


Er der nogen måde at ændre det automatiske konfigurationsskript og automatisk registrere indstillinger i kode?


Løsningen kan enten være P/Invoke registry redigering. Jeg har bare brug for noget, der virker.

Bedste reference


Du kan ændre proxyindstillinger ved hjælp af registreringsdatabasen. Se følgende link:

http://support.microsoft.com/kb/819961[8]


Nøglesti: HKEY\_CURRENT\_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings


Værdier:


"MigrateProxy"=dword:00000001
"ProxyEnable"=dword:00000001
"ProxyHttp1.1"=dword:00000000
"ProxyServer"="http://ProxyServername:80"
"ProxyOverride"="<local>"


Et spørgsmål i SuperUser.com om, hvordan du deaktiverer, registrerer automatisk indstillinger i f.eks. Proxy-konfiguration. Deaktiver 'Automatisk registrering af indstillinger' i IE proxy-konfiguration [9]


Et uddrag, taget fra Internet Explorer Automatic Configuration Script Definition via registreringsdatabasen. [10]


Script 1: Dette gør det muligt for AutoConf Script og definerer, hvad det er (bytt http://xxxx med dit script) [11]


Windows Registry Editor Version 5.00

[HKEY\_CURRENT\_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings]
"AutoConfigURL"="http://xxx.xxx.xxx.xxx.xxxx"
"ProxyEnable"=dword:00000000


Script 2: Dette script Deaktiverer AutoConf Script og aktiverer en proxyserver med undtagelser.


Windows Registry Editor Version 5.00

[HKEY\_CURRENT\_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings]
"ProxyEnable"=dword:00000001
"ProxyOverride"="proxyexceptionname:portnumber;anotherexceptionname:port
"ProxyServer"="ftp=MyFTPProxy:Port;http=MYHTTPPROXY:PORT;https=MYHTTPSPROXY:PORT
"AutoConfigURL"=""

Andre referencer 1


Jeg søgte det hele igennem. Men som jeg ikke kunne finde, havde jeg skrevet nedenstående kode udarbejdet, der virker til dette formål.


    /// <summary>
    /// Checks or unchecks the IE Options Connection setting of "Automatically detect Proxy"
    /// </summary>
    /// <param name="set">Provide 'true' if you want to check the 'Automatically detect Proxy' check box. To uncheck, pass 'false'</param>
    public void IEAutoDetectProxy(bool set)
    {
        // Setting Proxy information for IE Settings.
        RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections", true);
        byte[] defConnection = (byte[])RegKey.GetValue("DefaultConnectionSettings");
        byte[] savedLegacySetting = (byte[])RegKey.GetValue("SavedLegacySettings");
        if (set)
        {
            defConnection[8] = Convert.ToByte(9);
            savedLegacySetting[8] = Convert.ToByte(9);
        }
        else
        {
            defConnection[8] = Convert.ToByte(1);
            savedLegacySetting[8] = Convert.ToByte(1);
        }
        RegKey.SetValue("DefaultConnectionSettings", defConnection);
        RegKey.SetValue("SavedLegacySettings", savedLegacySetting);
    }

Andre referencer 2


Bedre end http://support.microsoft.com/kb/819961, via .REG-fil, bør vi henvise http://support.microsoft.com/kb/226473 'Sådan programmisk forespørger og indstiller proxy-indstillinger under Internet Explorer' , brug InternetSetOption (). [12] [13] [14]


Som http://blogs.msdn.com/b/ieinternals/archive/2013/10/11/web-proxy-configuration-and-ie11-changes.aspx sagde: 'I stedet for at forsøge at' poke 'registreringsdatabasen direkte, Den rigtige måde at opdatere proxyindstillingen på er at bruge InternetSetOption API'en. '[15]

Andre referencer 3


Jeg svarer, fordi jeg ikke har lov til at kommentere svar. Jeg vil gerne påpege en forskel mellem at manipulere registreringsdatabasen vs ved at bruge InternetSetOptionAPI. Hvis du direkte smider registreringsdatabasen for at ændre proxy-indstillinger, vil browsere som Chrome, der afhænger af WinInet proxy-konfiguration, ikke vinde de nye indstillinger straks, men hvis du ændrer at bruge InternetSetOptionAPI, vil de nye indstillinger blive brugt med det samme. Det er min erfaring. Jeg gik ikke ind i detaljerne for at finde ud af, hvad der kan gøres for at hente indstillingerne efter manipulation af registreringsdatabasen.


REDIGERE:
For at opdatere WinInet proxy-indstillingerne kan du gøre en simpel PInvoke of InternetSetOption API som følger


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


Kilde: Programmisk indstil browserproxyindstillinger i C #

Andre referencer 4


Du skal blot ændre værdien:


Registry Key : HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings
DWORD AutoDetect = 0 or 1


Se dette link. [17]