Что нового

[Сеть, интернет] Восстановление Wi-Fi соединения

Статус
Закрыто для дальнейших ответов.

Doctor3lo

Новичок
Сообщения
1
Репутация
0
Всем привет.
Сразу к делу, вопрос к ТС: подскажите, куда в скрипт можно поставить проверку пинга 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. :-[
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Doctor3lo
Что за мода поднимать старые темы?!

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 
Статус
Закрыто для дальнейших ответов.
Верх