Всем привет.
Сразу к делу, вопрос к ТС: подскажите, куда в скрипт можно поставить проверку пинга ya.ru и google.com, что бы была проверка. Если пинга нет, то переключаться с текущей Wi-Fi сети на другую доступную Wi-Fi сеть.
Я понимаю, что нужно как то тут поковырять?:
P.S.
Есть 2 Wi-Fi роутера, подключены к разным првайдерам, частенько бывают перебои в линии связи от роутеров, до провайдеров, вот и хочется, что бы пользователь, не отзванивался администратору со своей проблеммой (...нет интернета...), а автоматически переключался на другого провайдера.
P.P.S.
Я пока новичёк, но пытаюсь разобраться с AutoIt. :-[
Сразу к делу, вопрос к ТС: подскажите, куда в скрипт можно поставить проверку пинга ya.ru и google.com, что бы была проверка. Если пинга нет, то переключаться с текущей Wi-Fi сети на другую доступную Wi-Fi сеть.
Я понимаю, что нужно как то тут поковырять?:
Крепыш сказал(а):Вот такой шедевр у меня получился:
Код:#NoTrayIcon #include <Misc.au3> #include <TrayConstants.au3> #include <AutoItConstants.au3> #include <Encoding.au3> Global Const $sTitle = 'Wi-Fi' _Singleton($sTitle, 0) Opt('MustDeclareVars', 1) Opt('TrayOnEventMode', 1) Opt('TrayMenuMode', 3) Opt('TrayAutoPause', 0) TrayItemSetState(TrayCreateItem('Переподключить'), $TRAY_DEFAULT) TrayItemSetOnEvent(-1, '_Reconnect') Global $hAuto = TrayCreateItem('Автоматическое переподключение') TrayItemSetOnEvent($hAuto, '_Chek') TrayCreateItem('') TrayItemSetOnEvent(TrayCreateItem('Выход'), '_ExitScript') TraySetState() Global $sInterface, $sStatus, $sProfile, $sIP, $bAuto = True Global $iPID, $sOut, $array While True If Not $sInterface Or $sStatus <> 'Подключено' Then $sOut = '' $iPID = Run('netsh wlan show interfaces', '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) While True $sOut &= StdoutRead($iPID) If @error Then ExitLoop WEnd $array = StringRegExp(_Encoding_866To1251($sOut), 'Имя:\s+(.+)(?s).+?Состояние:\s+(?-s)(.+)(?s).+?(?:Профиль\s*)?:\s+(?-s)(.+)', 1) If Not $sInterface And UBound($array) >= 1 Then $sInterface = $array[0] Else TraySetToolTip('Беспроводной интерфейс не найден') EndIf If UBound($array) >= 2 Then $sStatus = $array[1] If $sStatus == 'Подключено' Then If UBound($array) >= 3 Then $sProfile = $array[2] If $bAuto Then TrayItemSetState($hAuto, $TRAY_CHECKED) $sIP = '192.168.1.1' ; Тут надо бы определить IP-адрес роутера TraySetToolTip($sInterface & @CRLF & 'Подключено' & @CRLF & $sProfile) ElseIf $sInterface Then TraySetToolTip($sInterface & @CRLF & 'Отключено') EndIf EndIf Sleep(1000) If $sIP Then If Not Ping($sIP) Then TraySetToolTip($sInterface & @CRLF & 'Отключено') $sStatus = '' $sProfile = '' If BitAND(TrayItemGetState($hAuto), $TRAY_CHECKED) Then Sleep(5000) TrayTip($sTitle, 'Wi-Fi соединение отсутствует', 5, 2) Sleep(5000) If Not Ping($sIP) Then TrayTip($sTitle, 'Переподключение', 5) _Reconnect() EndIf EndIf Else TraySetToolTip($sInterface & @CRLF & 'Подключено' & @CRLF & $sProfile) EndIf EndIf Wend Func _Reconnect() RunWait('netsh.exe interface set interface "' & $sInterface & '" disable', '', @SW_HIDE) Sleep(200) RunWait('netsh.exe interface set interface "' & $sInterface & '" enable', '', @SW_HIDE) Sleep(5000) EndFunc Func _Chek() If BitAND(TrayItemGetState($hAuto), $TRAY_CHECKED) Then $bAuto = False TrayItemSetState($hAuto, $TRAY_UNCHECKED) Else $bAuto = True TrayItemSetState($hAuto, $TRAY_CHECKED) EndIf EndFunc Func _ExitScript() Exit EndFunc
Если при запуске скрипта беспроводное соединение отключено, то скрипт находится в режиме ожидания, пока не будет подключения. После подключения к беспроводной сети скрипт раз в секунду пингует IP роутера, и если связь отвалилась, то восстанавливает её.
Осталось определить IP-адрес роутера, к которому подключается ноут. Как это сделать?
P.S.
Есть 2 Wi-Fi роутера, подключены к разным првайдерам, частенько бывают перебои в линии связи от роутеров, до провайдеров, вот и хочется, что бы пользователь, не отзванивался администратору со своей проблеммой (...нет интернета...), а автоматически переключался на другого провайдера.
P.P.S.
Я пока новичёк, но пытаюсь разобраться с AutoIt. :-[