Search code examples
internet-explorer

What key in windows registry disables IE connection parameter "Automatically Detect Settings"?


I'm trying to set all the connection settings in IE.

I've found how to modify most of them, in the path :

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

But I can't find the parameter that sets or unsets "Automatically Detect Settings".

Any help ?


Solution

  • I found the solution : it's the 9th byte of this key :

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections] "DefaultConnectionSettings"=hex:3c,00,00,00,1f,00,00,00,05,00,00,00,00,00,00, 00,00,00,00,00,00,00,00,00,01,00,00,00,1f,00,00,00,68,74,74,70,3a,2f,2f,31, 34,34,2e,31,33,31,2e,32,32,32,2e,31,36,37,2f,77,70,61,64,2e,64,61,74,90,0e, 1e,66,d3,88,c5,01,01,00,00,00,8d,a8,4e,9e,00,00,00,00,00,00,00,00

    It's a bitfield:

    • 0x1: (Always 1)
    • 0x2: Proxy enabled
    • 0x4: "Use automatic configuration script" checked
    • 0x8: "Automatically detect settings" checked

    Mask 0x8 to turn it off, i.e., subtract 8 if it's higher than 8.

    Thanks to Jamie on google groups.

    Update

    Based on the VBScript by WhoIsRich combined with details in this answer, here's a PowerShell script to amend these & related settings:

    function Set-ProxySettings {
        [CmdletBinding()]
        param ( #could improve with parameter sets 
            [Parameter(Mandatory = $false)]
            [bool]$AutomaticDetect = $true
            ,
            [Parameter(Mandatory = $false)]
            [bool]$UseProxyForLAN = $false
            ,
            [Parameter(Mandatory = $false)]
            [AllowNull()][AllowEmptyString()]
            [string]$ProxyAddress = $null
            ,
            [Parameter(Mandatory = $false)]
            [int]$ProxyPort = 8080 #closest we have to a default port for proxies
            ,
            [AllowNull()][AllowEmptyString()]
            [bool]$UseAutomaticConfigurationScript = $false
        )
        begin {
            [string]$ProxyRegRoot = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'
            [string]$DefaultConnectionSettingsPath = (Join-Path $ProxyRegRoot 'Connections')
            [byte]$MaskProxyEnabled = 2
            [byte]$MaskUseAutomaticConfigurationScript = 4
            [byte]$MaskAutomaticDetect = 8
            [int]$ProxyConnectionSettingIndex = 8
        }
        process {
        #this setting is affected by multiple options, so fetch once here 
        [byte[]]$DefaultConnectionSettings = Get-ItemProperty -Path $DefaultConnectionSettingsPath -Name 'DefaultConnectionSettings' | Select-Object -ExpandProperty 'DefaultConnectionSettings'
    
        #region auto detect
        if($AutomaticDetect) { 
            Set-ItemProperty -Path $ProxyRegRoot -Name AutoDetect -Value 1
            $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskAutomaticDetect
        } else {
            Set-ItemProperty -Path $ProxyRegRoot -Name AutoDetect -Value 0
            $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -band (-bnot $MaskAutomaticDetect)
        }
        #endregion
    
        #region defined proxy
        if($UseProxyForLAN) {
            if(-not ([string]::IsNullOrWhiteSpace($ProxyAddress))) {
                Set-ItemProperty -Path $ProxyRegRoot -Name ProxyServer -Value ("{0}:{1}" -f $ProxyAddress,$ProxyPort)
            }
            Set-ItemProperty -Path $ProxyRegRoot -Name ProxyEnable -Value 1
            $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskProxyEnabled
        } else {
            Set-ItemProperty -Path $ProxyRegRoot -Name ProxyEnable -Value 0        
            $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -band (-bnot $MaskProxyEnabled)
        }
        #endregion
    
        #region config script
        if($UseAutomaticConfigurationScript){
            $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -bor $MaskUseAutomaticConfigurationScript
        }else{
            $DefaultConnectionSettings[$ProxyConnectionSettingIndex] = $DefaultConnectionSettings[$ProxyConnectionSettingIndex] -band (-bnot $MaskUseAutomaticConfigurationScript) 
        }
        #endregion
    
        #persist the updates made above
        Set-ItemProperty -Path $DefaultConnectionSettingsPath -Name 'DefaultConnectionSettings' -Value $DefaultConnectionSettings
        }
    }