; _SetProxi('127.0.0.1:8080')
; _SetProxi('')
Func _SetProxi($sProxyFullAddr)
Local $ConnName = _ConnectionGetName()
If $ConnName <> -1 Then
Local $iFlag = 3
If Not $sProxyFullAddr Then $iFlag = 0
Local $ret = _ConnectionSetProxi($ConnName, $iFlag, $sProxyFullAddr)
Return $ret
EndIf
EndFunc
Func _ConnectionGetName()
Local $MAX_PATH = 260, $RAS_MaxDeviceType = 16, $RAS_MaxEntryName = 256, $RAS_MaxDeviceName = 128
Local $tRASCONN, $iCntByte, $iCntConn, $aRet, $conNum, $conName
$tRASCONN = DllStructCreate("dword dwSize;hwnd hRasConn;char szEntryName[" & $RAS_MaxEntryName + 1 & "];" & "char szDeviceType[" & $RAS_MaxDeviceType + 1 & "];" _
& "char szDeviceName[" & $RAS_MaxDeviceName + 1 & "];" & "char szPhonebook[" & $MAX_PATH & "];" & "dword dwSubEntry;byte guidEntry[16];dword dwFlags;byte luid[8]")
$iCntByte = DllStructCreate("dword")
$iCntConn = DllStructCreate("dword")
DllStructSetData($iCntByte, 1, DllStructGetSize($tRASCONN))
DllStructSetData($tRASCONN, "dwSize", DllStructGetSize($tRASCONN))
$aRet = DllCall("rasapi32.dll", "int", "RasEnumConnections", "ptr", DllStructGetPtr($tRASCONN), "ptr", DllStructGetPtr($iCntByte), "ptr", DllStructGetPtr($iCntConn))
If @Error Or $aRet[0] Then Return SetError(1, 0, -1)
$conNum = DllStructGetData($iCntConn, 1)
If $conNum < 1 Then Return SetError(2, 0, '') ;Error: not opened connections
$conName = DllStructGetData($tRASCONN, "szEntryName")
Return SetError(0, $conNum, $conName)
EndFunc
Func _ConnectionSetProxi($sNameConnection = '', $iFlag = 3, $sProxyFullAddr = '', $sProxyOverride = 'local')
Local $INTERNET_PER_CONN_OPTION, $INTERNET_PER_CONN_OPTION_LIST, $t, $t1, $t2, $Ret
Local $tagINTERNET_PER_CONN_OPTION_LIST = 'DWORD dwSize; ptr pszConnection; DWORD dwOptionCount; DWORD dwOptionError; ptr pOptions;'
$INTERNET_PER_CONN_OPTION = DllStructCreate('DWORD dwValue1; ptr pszValue1; int FILETIMEVALUE1; DWORD dwValue2; ptr pszValue2; int FILETIMEVALUE2; DWORD dwValue3; ptr pszValue3; int FILETIMEVALUE3;')
$INTERNET_PER_CONN_OPTION_LIST = DllStructCreate($tagINTERNET_PER_CONN_OPTION_LIST)
DllStructSetData($INTERNET_PER_CONN_OPTION_LIST, 'dwSize', DllStructGetSize($INTERNET_PER_CONN_OPTION_LIST))
$t = DllStructCreate('char[' & StringLen($sNameConnection) + 1 & ']')
DllStructSetData($t, 1, $sNameConnection)
DllStructSetData($INTERNET_PER_CONN_OPTION_LIST, 'pszConnection', DllStructGetPtr($t))
DllStructSetData($INTERNET_PER_CONN_OPTION_LIST, 'dwOptionCount', 3)
DllStructSetData($INTERNET_PER_CONN_OPTION_LIST, 'pOptions', DllStructGetPtr($INTERNET_PER_CONN_OPTION))
; Set flags.
DllStructSetData($INTERNET_PER_CONN_OPTION, 'dwValue1', 1) ;INTERNET_PER_CONN_FLAGS
DllStructSetData($INTERNET_PER_CONN_OPTION, 'pszValue1', $iFlag) ;PROXY_TYPE_DIRECT | PROXY_TYPE_PROXY = 1 + 2 (Or = 0 - reset proxi)
; Set proxy name.
$t1 = DllStructCreate('char[' & StringLen($sProxyFullAddr) + 1 & ']')
DllStructSetData($t1, 1, $sProxyFullAddr)
DllStructSetData($INTERNET_PER_CONN_OPTION, 'dwValue2', 2) ;INTERNET_PER_CONN_PROXY_SERVER;
DllStructSetData($INTERNET_PER_CONN_OPTION, 'pszValue2', DllStructGetPtr($t1)) ;//"http://proxy:80";
; Set proxy override.
$t2 = DllStructCreate('char[' & StringLen($sProxyOverride) + 1 & ']')
DllStructSetData($t2, 1, $sProxyOverride)
DllStructSetData($INTERNET_PER_CONN_OPTION, 'dwValue3', 3) ;INTERNET_PER_CONN_PROXY_BYPASS;
DllStructSetData($INTERNET_PER_CONN_OPTION, 'pszValue3', DllStructGetPtr($t2));"local";
$Ret = DllCall('WININET.DLL', 'int', 'InternetSetOption', 'hwnd', 0, 'dword', 75, 'ptr', DllStructGetPtr($INTERNET_PER_CONN_OPTION_LIST), 'dword*', DllStructGetSize($INTERNET_PER_CONN_OPTION_LIST))
If (@Error) Or ($Ret[0] = 0) Then
Return SetError(1, 0, 0)
Else
DllCall('wininet.dll', 'int', 'InternetSetOption', 'none', 'null', 'int', 39, 'none', 'null', 'int', 0);INTERNET_OPTION_SETTINGS_CHANGED
DllCall('wininet.dll', 'int', 'InternetSetOption', 'none', 'null', 'int', 37, 'none', 'null', 'int', 0);INTERNET_OPTION_REFRESH
Return 1
EndIf
EndFunc