Babullika
Незнаю, как сработает с ADSL подключением, но с dialup работает:
Код:

While 1
If Int(_RASConStat(4) / 1000 / 60) >= 60 Then
$hRASConn = _RasEnumConnections()
If Not @error Then _RasHangUp($hRASConn)
Exit
EndIf
Sleep(1000)
WEnd
; #FUNCTION# ====================================================================================================================
; $iFlag:
; 1 - The number of bytes transmitted through this connection or link.
; 2 - The number of bytes received through this connection or link.
; 3 - Total
; 4 - The amount of time, in milliseconds, that the connection or link has been connected.
Func _RASConStat($sFlags = 1)
Local $hRASConn = _RasEnumConnections()
If @error Then Return SetError(1, 0, 0)
$tRAS_STATS = DllStructCreate("dword dwSize;dword dwBytesXmited;dword dwBytesRcved;dword dwFramesXmited;" & _
"dword dwFramesRcved;dword dwCrcErr;dword dwTimeoutErr;dword dwAlignmentErr;" & _
"dword dwHardwareOverrunErr;dword dwFramingErr;dword dwBufferOverrunErr;" & _
"dword dwCompressionRatioIn;dword dwCompressionRatioOut;dword dwBps;dword dwConnectDuration")
DllStructSetData($tRAS_STATS, "dwSize", DllStructGetSize($tRAS_STATS))
$aRet = DllCall("rasapi32.dll", "int", "RasGetConnectionStatistics", _
"hwnd", $hRASConn, _
"ptr", DllStructGetPtr($tRAS_STATS))
If $aRet[0] Then Return SetError(2, 0, 0)
Local $iResult = 0
Switch $sFlags
Case 1
$iResult = DllStructGetData($tRAS_STATS, "dwBytesXmited")
Case 2
$iResult = DllStructGetData($tRAS_STATS, "dwBytesRcved")
Case 3
$iResult = DllStructGetData($tRAS_STATS, "dwBytesXmited") + DllStructGetData($tRAS_STATS, "dwBytesRcved")
Case 4
$iResult = DllStructGetData($tRAS_STATS, "dwConnectDuration")
EndSwitch
Return $iResult
EndFunc ;==>_RASConStat
Func _RasEnumConnections()
Local Const $MAX_PATH = 260
Local Const $RAS_MaxDeviceType = 16
Local Const $RAS_MaxEntryName = 256
Local Const $RAS_MaxDeviceName = 128
Local $tRASCONN, $iCntByte, $iCntConn, $aRet
$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]")
DllStructSetData($tRASCONN, "dwSize", DllStructGetSize($tRASCONN))
$iCntByte = DllStructCreate("dword")
$iCntConn = DllStructCreate("dword")
DllStructSetData($iCntByte, 1, DllStructGetSize($tRASCONN))
$aRet = DllCall("rasapi32.dll", "int", "RasEnumConnections", _
"ptr", DllStructGetPtr($tRASCONN), _
"ptr", DllStructGetPtr($iCntByte), _
"ptr", DllStructGetPtr($iCntConn))
If $aRet[0] Then Return SetError(1, $aRet[0], -1)
If DllStructGetData($iCntConn, 1) < 1 Then Return SetError(2, 0, 0) ;Error: not opened connections
Return DllStructGetData($tRASCONN, "hRasConn")
EndFunc ;==>_RasEnumConnections
Func _RasHangUp($HRASCONN)
$aRet = DllCall("Rasapi32.dll", "int", "RasHangUp", _
"hwnd", $HRASCONN)
Return $aRet[0]
EndFunc ;==>_RasHangUp