The code below allows you to set and disable a proxy without having to restart Internet Explorer.

It has been converted from the C++ code on this page: http://www.codeproject.com/internet/changeproxy1.asp

I stumbled upon this code somewhere a long time ago while searching for other code with google, so I'm not the one who converted it. I did make a few small changes, because not all memory was released properly, which made it crash when changing or disabling a proxy for the second time.

VB Code:
  1. 'Module
  2. Option Explicit
  3.  
  4. Private Type INTERNET_PER_CONN_OPTION
  5.     dwOption As Long
  6.     dwValue1 As Long
  7.     dwValue2 As Long
  8. End Type
  9. Private Type INTERNET_PER_CONN_OPTION_LIST
  10.     dwSize As Long
  11.     pszConnection As Long
  12.     dwOptionCount As Long
  13.     dwOptionError As Long
  14.     pOptions As Long
  15. End Type
  16. Private Const INTERNET_PER_CONN_FLAGS As Long = 1
  17. Private Const INTERNET_PER_CONN_PROXY_SERVER As Long = 2
  18. Private Const INTERNET_PER_CONN_PROXY_BYPASS As Long = 3
  19. Private Const PROXY_TYPE_DIRECT As Long = &H1
  20. Private Const PROXY_TYPE_PROXY As Long = &H2
  21. Private Const INTERNET_OPTION_REFRESH As Long = 37
  22. Private Const INTERNET_OPTION_SETTINGS_CHANGED As Long = 39
  23. Private Const INTERNET_OPTION_PER_CONNECTION_OPTION As Long = 75
  24. Private Declare Function InternetSetOption _
  25.         Lib "wininet.dll" Alias "InternetSetOptionA" ( _
  26.         ByVal hInternet As Long, ByVal dwOption As Long, _
  27.         lpBuffer As Any, ByVal dwBufferLength As Long) As Long
  28.  
  29. ' Set Proxy
  30.  
  31. Public Function SetConnectionOptions(ByVal conn_name As String, ByVal proxy_full_addr As String) As Boolean
  32. ' conn_name: active connection name. (LAN = "")
  33. ' proxy_full_addr : eg "193.28.73.241:8080"
  34. Dim list As INTERNET_PER_CONN_OPTION_LIST
  35. Dim bReturn As Boolean
  36. Dim dwBufSize As Long
  37. Dim options(0 To 2) As INTERNET_PER_CONN_OPTION
  38. Dim abConnName() As Byte
  39. Dim abProxyServer() As Byte
  40. Dim abProxyBypass() As Byte
  41.    
  42.     dwBufSize = Len(list)
  43.    
  44.     ' Fill out list struct.
  45.     list.dwSize = Len(list)
  46.    
  47.     ' NULL == LAN, otherwise connection name.
  48.     abConnName() = StrConv(conn_name & vbNullChar, vbFromUnicode)
  49.     list.pszConnection = VarPtr(abConnName(0))
  50.    
  51.     ' Set three options.
  52.     list.dwOptionCount = 3
  53.  
  54.     ' Set flags.
  55.     options(0).dwOption = INTERNET_PER_CONN_FLAGS
  56.     options(0).dwValue1 = PROXY_TYPE_DIRECT Or PROXY_TYPE_PROXY
  57.  
  58.     ' Set proxy name.
  59.     options(1).dwOption = INTERNET_PER_CONN_PROXY_SERVER
  60.     abProxyServer() = StrConv(proxy_full_addr & vbNullChar, vbFromUnicode)
  61.     options(1).dwValue1 = VarPtr(abProxyServer(0))  '//"http://proxy:80"
  62.  
  63.     ' Set proxy override.
  64.     options(2).dwOption = INTERNET_PER_CONN_PROXY_BYPASS
  65.     abProxyBypass() = StrConv("local" & vbNullChar, vbFromUnicode)
  66.     options(2).dwValue1 = VarPtr(abProxyBypass(0))
  67.  
  68.     list.pOptions = VarPtr(options(0))
  69.     ' Make sure the memory was allocated.
  70.     If (0& = list.pOptions) Then
  71.         ' Return FALSE if the memory wasn't allocated.
  72.         Debug.Print "Failed to allocate memory in SetConnectionOptions()"
  73.         SetConnectionOptions = 0
  74.     End If
  75.  
  76.     ' Set the options on the connection.
  77.     bReturn = InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)
  78.  
  79.     ' Free the allocated memory.
  80.     Erase options
  81.     Erase abConnName
  82.     Erase abProxyServer
  83.     Erase abProxyBypass
  84.     dwBufSize = 0
  85.     list.dwOptionCount = 0
  86.     list.dwSize = 0
  87.     list.pOptions = 0
  88.     list.pszConnection = 0
  89.     Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, ByVal 0&, 0)
  90.     Call InternetSetOption(0, INTERNET_OPTION_REFRESH, ByVal 0&, 0)
  91.     SetConnectionOptions = bReturn
  92. End Function
  93.  
  94.  
  95. ' Disable Proxy
  96.  
  97. Public Function DisableConnectionProxy(ByVal conn_name As String) As Boolean
  98. ' conn_name: active connection name. (LAN = "")
  99. Dim list As INTERNET_PER_CONN_OPTION_LIST
  100. Dim bReturn As Boolean
  101. Dim dwBufSize As Long
  102. Dim options(0) As INTERNET_PER_CONN_OPTION
  103. Dim abConnName() As Byte
  104.    
  105.     dwBufSize = Len(list)
  106.    
  107.     ' Fill out list struct.
  108.     list.dwSize = Len(list)
  109.    
  110.     ' NULL == LAN, otherwise connectoid name.
  111.     abConnName() = StrConv(conn_name & vbNullChar, vbFromUnicode)
  112.     list.pszConnection = VarPtr(abConnName(0))
  113.    
  114.     ' Set three options.
  115.     list.dwOptionCount = 1
  116.  
  117.     ' Set flags.
  118.     options(0).dwOption = INTERNET_PER_CONN_FLAGS
  119.     options(0).dwValue1 = PROXY_TYPE_DIRECT
  120.  
  121.     list.pOptions = VarPtr(options(0))
  122.     ' Make sure the memory was allocated.
  123.     If (0 = list.pOptions) Then
  124.         ' Return FALSE if the memory wasn't allocated.
  125.         Debug.Print "Failed to allocate memory in DisableConnectionProxy()"
  126.         DisableConnectionProxy = 0
  127.     End If
  128.  
  129.     ' Set the options on the connection.
  130.     bReturn = InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)
  131.    
  132.     ' Free the allocated memory.
  133.     Erase options
  134.     Erase abConnName
  135.     dwBufSize = 0
  136.     list.dwOptionCount = 0
  137.     list.dwSize = 0
  138.     list.pOptions = 0
  139.     list.pszConnection = 0
  140.     Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, ByVal 0&, 0)
  141.     Call InternetSetOption(0, INTERNET_OPTION_REFRESH, ByVal 0&, 0)
  142.     DisableConnectionProxy = bReturn
  143. End Function

VB Code:
  1. 'Form
  2. Option Explicit
  3.  
  4. Private Sub cmdSetProxy_Click()
  5.     Dim conn_name As String, proxy_full_addr As String
  6.     conn_name = ""
  7.     proxy_full_addr = "167.35.217.71:8080"
  8.     Call SetConnectionOptions(conn_name, proxy_full_addr)
  9. End Sub
  10.  
  11. Private Sub cmdDisableProxy_Click()
  12.     Dim conn_name As String
  13.     conn_name = ""
  14.     Call DisableConnectionProxy(conn_name)
  15. End Sub